1. 程式人生 > >Python 語言學習 第二篇:數據類型(字符串)

Python 語言學習 第二篇:數據類型(字符串)

拼接 查找字符 保留 upper gis 原始的 一次 \n 處的

字符串是一個有序的字符的不可變序列,用於存儲基於文本的信息。字符串所包含的字符存在從左至右的位置順序,不可以在原處(in-place)修改。Python沒有C語言的字符和字符串之分,只有字符串。從嚴格意義上說,字符串是單個字符的序列,支持元素基於位置的操作,能夠通過位置索引字符;由於字符串具有不可變性,不能對原始的字符串進行修改,也就是說,不能通過對其某一位置進行賦值而修改字符串。

一,字符串常量

字符串常量使用成對的單引號或雙引號來表示,兩者表示的效果是一樣的。

1,在字符串常量中表示引號

如果字符串中包含單引號,可以表示為"ab‘cd",如果字符串中包含雙引號,可以表示為‘ab"cd‘,

2,轉義字符

\是轉義字符,可以用於表示特殊的字符,例如,\t 表示水平制表符,\v表示垂直制表符,\n 表示換行,\r表示回車。

要在字符串中表示\,可以在字符串中使用兩個轉義字符:"\\"

也可以用轉義字符來表示單引號或雙引號:"ab‘cd"等價於"ab\‘cd",‘ab"cd‘等價於‘ab\"cd‘。

3,Raw字符串

Raw字符串抑制轉義,字符串中的文本就是字面代表的意思,字符串的引號前面多了一個小寫的r,表示該字符串是Raw字符串,關閉轉義,常用於表示文件的路徑:

myfilepath = rC:\folder\text.dat

4,多行文本

一般情況下,字符串中的所有字符都必須在同一行,如果要編寫多行文本,那麽字符串必須以三個單引號開頭,或三個雙引號開頭。三重引號表示多行文本,每行文本之間嵌入換行符(\n):

>>> ms="""I
... am
... fine"""
>>> ms
I\nam\nfine

二,字符串的索引和分片

因為字符串是字符的有序序列,所以,可以通過位置(稱作索引)獲得序列中的單個字符。在Python中,字符串中的單個字符可以通過索引來提取,索引是通過中括號[n]來指定的,n是偏移量,從0開始,最大值是字符串長度-1。

>>> s=abcd
>>> s[0],s[1],s[2]
(a, b, c)

1,索引 s[i],獲得特定偏移的單個字符

正向偏移量從0開始,最大值是字符串長度-1,偏移量還可以是負值,把負偏移看作是從結束處反向計數,最後一個元素的負偏移是-1。從技術上講,一個負偏移與這個字符串的長度相加後得到這個字符串的正偏移。

技術分享圖片

索引(s[i])獲取特定偏移的元素:

  • 第一個元素的偏移位0
  • 負偏移索引意味著從最後或右邊反向進行計數
  • s[0]獲取第一個元素
  • s[-2]獲取了倒數第二個元素(就像s[len(s)-2]一樣)

2,分片 s[i:j],獲取字符串的一個子序列

分片是字符串的子串,使用冒號來分割偏移的上下限,分片的格式是:s[start : end],返回從start開始,到end結束(不包括end)的所有字符,分片操作符的含義是:

  • start是開始索引,包括開始索引處的字符
  • end是結束索引,不包括結束索引處的字符
  • 分片返回start和end之間的所有字符
  • start和end索引都可以省略,當省略start索引時,表示從0開始;當省略end索引時,表示到最後一個元素結束。

例如,返回字符串索引為0和1的字符:

>>> s=abcd
>>> s[0:2]
ab 

分片(s[i:j])提取對應的部分作為一個序列:

  • 結束邊界的字符並不包含在內
  • 如果沒有給出邊界的值,邊界默認的值為0和序列的長度,
  • s[1:3]獲取了從偏移位1的元素,直到但不包括偏移為3的元素。
  • s[1:]獲取了偏移為1直到末尾(偏移為序列長度)之間的元素。
  • s[:3]獲取了從偏移為0直到但是不包括偏移為3之間的元素。
  • s[:-1]獲取了從偏移為0直到但是不包括最後一個元素之間的元素。
  • s[:]獲取了從偏移為0到末尾之間的元素,這有效地實現完全的頂層的序列s的拷貝——一個有相同值得序列。

三,字符串基本操作

1,字符串拼接

>>> abc+de
abcde

2,字符串長度

>>> len(abc)
3

3,字符串重復

>>> abc*3
abcabcabc

4,ASCII碼和字符的轉化

>>> ord(a)
97
>>> chr(97)
a

5,數字和字符的轉化

>>> str(123)
123
>>> int(123)
123
>>> float(12.3)
12.3

四,常用的字符串函數

1,大小寫轉換

>>> s=Ab
>>> s.lower()
ab
>>> s.upper()
AB

2,替換字符

s.replace(old,new[,count]),把字符串中的old字符串替換為new字符串,可以指定替換的數量count

>>> s=Ab
>>> s.replace(A,N)
Nb

3,查找字符

s.find(sub[,start,end]),從s中查找sub字符串,如果存在返回sub第一個字符的索引,如果不存在,返回-1

>>> s=abcde
>>> s.find(bc)
1

4,拆分字符串

s.split(sep,[maxsplit])按照sep把s拆分成列表,maxsplit指定最大的拆分次數

>>> s=a b c d
>>> s.split( )
[a, b, c, d]

5,刪除字符串兩端的空格

s.strip()刪除字符串兩端的空格,s.lstrip()刪除字符串左側的空格,s.rstrip()刪除字符串右側的空格

>>> s= ab cd 
>>> s.strip(),s.lstrip(),s.rstrip()
(ab cd, ab cd ,  ab cd)

6,聯結字符串

s.join(seq) seq是字符串序列,join函數的作用是以 s作為分隔符,將 seq 中所有的元素合並為一個新的字符串。

>>> s=(a,b,c)
>>> -.join(s)
a-b-c

>>> s=[a,b,c]
>>> -.join(s)
a-b-c

五,修改字符串

字符串是不可變的,不能在原處直接修改字符串,當基於已存在的字符串創建新的文本值時,可以通過list來實現:

>>> s=abcd
>>> s=list(s)
>>> s
[a, b, c, d]
>>> s[3]=x
>>> s=‘‘.join(s)
>>> s
abcx

內置的list(str)函數,把字符串中的元素按照順序創建為一個列表,列表項的順序就是字符串中各個字符的順序。

對list的各個列表項進行修改,按照使用‘‘.join(list)函數,把列表項合並成字符串。

六,字符串的格式化方法調用

格式化方法調用是指調用format()函數對字符串進行格式化,使用主體字符串作為模板,接受任意多個format()的參數來替換模板中的占位符。

在主體字符串中,大括號通過位置{0},{1} 或關鍵字{key1},{key2}指出要替換的目標以及要插入的參數。

1,使用數字占位符

首先聲明一個模板字符串template,{n}代表一個占位符,n是索引,從0開始;format()函數的參數用於替換模板template中的占位符

>>> template={0},{1} and {2}
>>> template.format(Jim,John,Vic)
Jim,John and Vic

2,使用關鍵字占位符

>>> template={a},{b} and {c}
>>> template.format(a=Jim,b=John,c=Vic)
Jim,John and Vic

附:python3.0+中的字符串方法

方法 描述
s.capitalize() 將字符串的第一個字母變成大寫,其他字母變小寫。
s.center(width[, fillchar]) 返回一個原字符串居中,並使用空格填充至長度 width 的新字符串。默認填充字符為空格。width -- 字符串的總寬度,fillchar -- 填充字符。
s.count(sub[, start[, end]]) 統計字符串裏某個字符出現的次數。可選參數為在字符串搜索的開始與結束位置。sub -- 搜索的子字符串,start -- 字符串開始搜索的位置。默認為第一個字符,第一個字符索引值為0,end -- 字符串中結束搜索的位置。字符中第一個字符的索引為 0。默認為字符串的最後一個位置。
s.encode(encoding="utf-8", errors="strict") 返回轉換編碼後的字符串。參數s是要轉換內容的對象;encoding -- 要使用的編碼,如"UTF-8";errors -- 設置不同錯誤的處理方案。默認為 ‘strict‘,意為編碼錯誤引起一個UnicodeError。 其他可能得值有 ‘ignore‘, ‘replace‘, ‘xmlcharrefreplace‘, ‘backslashreplace‘ 以及通過 codecs.register_error() 註冊的任何值。
s.decode(encoding=‘UTF-8‘, errors=‘strict‘) 以 encoding 指定的編碼格式解碼字符串。默認編碼為字符串編碼。encoding -- 要使用的編碼,如"UTF-8";errors -- 設置不同錯誤的處理方案。默認為 ‘strict‘,意為編碼錯誤引起一個UnicodeError;其他可能得值有 ‘ignore‘, ‘replace‘, ‘xmlcharrefreplace‘, ‘backslashreplace‘ 以及通過 codecs.register_error() 註冊的任何值。
s.endswith(suffix[, start[, end]]) 判斷字符串是否以指定後綴結尾,如果以指定後綴結尾返回True,否則返回False。可選參數"start"與"end"為檢索字符串的開始與結束位置。suffix -- 該參數可以是一個字符串或者是一個元素。start -- 字符串中的開始位置。end -- 字符中結束位置。
s.expandtabs(tabsize=8) 把字符串中的 tab 符號(‘\t‘)轉為空格,tab 符號(‘\t‘)默認的空格數是 8。tabsize -- 指定轉換字符串中的 tab 符號(‘\t‘)轉為空格的字符數。
s.find(str, beg=0, end=len(s)) 檢測字符串中是否包含子字符串str,如果指定beg(開始)和end(結束)範圍,則檢查是否包含在指定範圍內,如果包含子字符串返回開始的索引值,否則返回-1。str -- 指定檢索的字符串,beg -- 開始索引,默認為0,end -- 結束索引,默認為字符串的長度。
s.index(str, beg=0, end=len(s)) 檢測字符串中是否包含子字符串 str ,如果指定 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,該方法與 python find()方法一樣,只不過如果str不在 s中會報一個異常。str -- 指定檢索的字符串。beg -- 開始索引,默認為0。end -- 結束索引,默認為字符串的長度。
s.isalnum() 檢測字符串是否由字母和數字組成。如果s至少有一個字符並且所有字符都是字母或數字則返回 True,否則返回 False。
s.isalpha() 檢測字符串是否只由字母組成。如果字符串至少有一個字符並且所有字符都是字母則返回 True,否則返回 False。
s.isdecimal() 檢查字符串是否只包含十進制字符。這種方法只存在於unicode對象。註意:定義一個十進制字符串,只需要在字符串前添加 ‘u‘ 前綴即可。如果字符串是否只包含十進制字符返回True,否則返回False。
s.isdigit() 檢測字符串是否只由數字組成。如果字符串只包含數字則返回 True 否則返回 False。
s.islower() 檢測字符串是否由小寫字母組成。如果字符串中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是小寫,則返回 True,否則返回 False
s.isnumeric() 檢測字符串是否只由數字組成。這種方法是只針對unicode對象。註:定義一個字符串為Unicode,只需要在字符串前添加 ‘u‘ 前綴即可。如果字符串中只包含數字字符,則返回 True,否則返回 False。
s.isspace() 檢測字符串是否只由空格組成。如果字符串中只包含空格,則返回 True,否則返回 False。
s.istitle() 檢測字符串中所有的單詞拼寫首字母是否為大寫,且其他字母為小寫。如果字符串中所有的單詞拼寫首字母是否為大寫,且其他字母為小寫則返回 True,否則返回 False.
s.isupper() 檢測字符串中所有的字母是否都為大寫。如果字符串中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是大寫,則返回 True,否則返回 False
s.join(seq) 以 s作為分隔符,將 seq 中所有的元素(的字符串表示)合並為一個新的字符串。
s.ljust(width) 返回一個原字符串左對齊,並使用空格填充至指定長度的新字符串。如果指定的長度小於原字符串的長度則返回原字符串。width -- 指定字符串長度。fillchar -- 填充字符,默認為空格。
s.lower() 返回將字符串中所有大寫字符轉換為小寫後生成的字符串。
s.lstrip([chars]) 返回截掉字符串左邊的空格或指定字符後生成的新字符串。chars --指定截取的字符,默認為空格。
string.maketrans(intab, outtab]) 創建字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,第一個參數是字符串,表示需要轉換的字符,第二個參數也是字符串表示轉換的目標。註:兩個字符串的長度必須相同,為一一對應的關系。返回字符串轉換後生成的新字符串。通過from string import maketrans調用
max(s) 返回字符串中最大的字母。
min(s) 返回字符串中最小的字母。
s.partition(str) 用來根據指定的分隔符將字符串進行分割。如果字符串包含指定的分隔符,則返回一個3元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串。
s.replace(old, new[, max]) 返回字符串中的 old(舊字符串) 替換成 new(新字符串)後生成的新字符串,如果指定第三個參數max,則替換不超過 max 次。old -- 將被替換的子字符串。new -- 新字符串,用於替換old子字符串。max -- 可選字符串, 替換不超過 max 次
s.rfind(str, beg=0,end=len(s) ) 返回字符串最後一次出現的位置,如果沒有匹配項則返回-1。str -- 查找的字符串。beg -- 開始查找的位置,默認為0。end -- 結束查找位置,默認為字符串的長度。
s.rindex( str, beg=0,end=len(s)) 返回子字符串 str 在字符串中最後出現的位置,如果沒有匹配的字符串會報異常,你可以指定可選參數[beg:end]設置查找的區間。str -- 查找的字符串。beg -- 開始查找的位置,默認為0。end -- 結束查找位置,默認為字符串的長度。
s.rjust(width[, fillchar]) 返回一個原字符串右對齊,並使用空格填充至長度 width 的新字符串。如果指定的長度小於字符串的長度則返回原字符串。width -- 指定填充指定字符後中字符串的總長度。fillchar -- 填充的字符,默認為空格。
s.rpartition(str) 類似於 partition()函數,不過是從右邊開始查找。
s.rstrip([chars]) 刪除 string 字符串末尾的指定字符(默認為空格)。chars -- 指定刪除的字符(默認為空格)
s.split(str=""[, num]) 通過指定分隔符對字符串進行切片,如果參數num 有指定值,則僅分隔 num 個子字符串,返回分割後的字符串列表。str -- 分隔符,默認為空格。num -- 分割次數。
s.splitlines([keepends]) 按照行(‘\r‘, ‘\r\n‘, \n‘)分隔,返回一個包含各行作為元素的列表,如果參數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。keepends -- 在輸出結果裏是否去掉換行符(‘\r‘, ‘\r\n‘, \n‘),默認為 False,不包含換行符,如果為 True,則保留換行符。
s.startswith(str,beg=0,end=len(string)) 檢查字符串是否是以指定子字符串開頭,如果是則返回 True,否則返回 False。如果參數 beg 和 end 指定值,則在指定範圍內檢查。str -- 檢測的字符串。beg -- 可選參數用於設置字符串檢測的起始位置。end -- 可選參數用於設置字符串檢測的結束位置。
s.strip([chars]) 返回移除字符串頭尾指定的字符(默認為空格換行等空字符)生成的新字符串。chars -- 移除字符串頭尾指定的字符。
s.swapcase() 返回大小寫字母轉換後生成的新字符串。
s.title() 返回"標題化"的字符串,就是說所有單詞都是以大寫開始,其余字母均為小寫(見 istitle())。
s.translate(table[, deletechars]) 根據參數table給出的表(包含 256 個字符)轉換字符串的字符, 要過濾掉的字符放到 del 參數中,返回翻譯後的字符串。。able -- 翻譯表,翻譯表是通過maketrans方法轉換而來。deletechars -- 字符串中要過濾的字符列表。
s.upper() 返回小寫字母轉為大寫字母的字符串。
s.zfill(width) 返回指定長度的字符串,原字符串右對齊,前面填充0。width -- 指定需要返回字符串的長度。原字符串右對齊,前面填充0。

參考文檔:

Python基礎--字符串

Python 語言學習 第二篇:數據類型(字符串)