字串是一個字元的、有序的、不可變的序列,用於儲存基於文字的資訊。字串所包含的字元存在從左至右的位置順序,不可以在原處(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 = r'C:\folder\text.dat'
r 表示非轉義的原始字串,對於跳脫字元,即 \加上對應的字母,表示特殊含義的字元,比如最常見的”\n”表示換行,”\t”表示Tab等,當字串以r開頭,說明字串中都是普通的字元,即使字串中出現“\n”,也表示一個反斜槓字元和一個字母n,而不是表示換行了。
4,多行文字
在一般情況下,字串中的所有字元都必須出現在同一行。如果要編寫多行文字,那麼字串必須以三個單引號開頭,或三個雙引號開頭,稱作三重引號,用於表示多行文字,每行文字之間嵌入換行符(\n):
>>> ms="""I... am... fine""">>> ms'I\nam\nfine'
5,編碼
u/U:表示unicode字串,不是僅僅是針對中文, 可以針對任何的字串,代表是對字串進行unicode編碼,建議所有編碼方式採用utf8
二,字串的索引和分片因為字串是字元的有序序列,所以,可以透過位置(稱作索引)獲得序列中的單個字元。在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是分隔符,按照sep把字串s拆分成列表,maxsplit指定最大的拆分次數
>>> s='a b c d'>>> s.split(' ')['a', 'b', 'c', 'd']
5,刪除字串兩端的空格
>>> 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]) | |
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。 |