Python3.2中的字串函數學習總結

來源:互聯網
上載者:User
Sequence Types

sequence類型有六種:strings, byte sequences (bytes objects), byte arrays(bytearray objects), list, tuple, range objects.

sequence類型都支援的通用操作:
成員檢查:in、not in
串連:+
複製:*
下標取值:s[i]
切片:s[i : j]
長度檢查:len(s)
最小值:min(s)
最大值:max(s)
索引取值:s.index(i)
字串統計:s.count(i)

String Methods

判斷類方法,通常返回一個布爾值:

str.endswith(suffix[, start[, end]]):

判斷字串是否以指定尾碼結尾,返回True或False。start和end指定判斷的起始範圍,預設全字串。如:

代碼如下:


'abcde'.endswith('de') -->True
'abcde'.endswith('de', 0, 3) -->Flase



str.startwith(prefix[, start[, end]]):

與str.endwith()相反,判斷字串是否以指定首碼開始。

str.islower():

判斷字串中的字母字元是否全部為小寫,該方法僅判斷字串中的字母字元,不理會其它字元。字串必須至少包含一個字母字元,否則返回False。如:

代碼如下:


‘中國'.islower() -->False
‘ab中國'.islower() -->True

str.isupper():

與st.islower()方法相反,判斷所有字母字元是否全部大寫。

str.istitle():

判斷字串每個單詞的首字母是否大寫。字串必須至少包含一個字母字元,否則返回False。即使首字母字元前面有非字母字元,如中文、數字、底線等,也不影響對首字母字元的判斷。

代碼如下:


‘中國'.istitle() -->False //字串不包含字母,返回False
‘中國Abc'.istitle() -->True //雖然首字母字元A前面有非字母字元,仍然返回True
‘-Abc xyz'.istitle() -->False //後一個單詞的首字母不是大寫,返回False

str.isalnum():

判斷字串是否只包含由文字數字式字元,字串僅包含中文字元合法。若字串包含空格、底線、~等非文字數字式字元,均返回False。如:

代碼如下:


‘3'.isalnum() -->True
‘中國'.isalnum() -->True
‘-'.isalnum() -->False


註:alphanumberic是一個特殊詞彙,它表明這個字串由數字字元或文字字元組成。如,'3'包括了一個數字字元,'a'包含了一個文字字元,而'3a'同時包括數字字元和字母字元。

str.isalpha():
判斷字串是否只包含文字字元,字串僅包含中文字元合法。如:

代碼如下:


‘中國'.isalpha() -->True
‘3'.isalpha() -->False


str.isidentifier():

判斷字串是否是合法的標識符,字串僅包含中文字元合法,實際上這裡判斷的是變數名是否合法。如:

代碼如下:


‘_a'.isidentifier() -->True
‘3a'.isidentifier() -->False
‘中國'.isidentifier() -->True


str.isprintable():

判斷字串所包含的字元是否全部可列印。字串包含不可列印字元,如逸出字元,將返回False。

str.isspace():

判斷字串是否僅包含空格或定位字元。注意:空白字元與空白是不同的,如:

代碼如下:


''.isspace() -->False
' '.isspace() -->True

str.isdecimal():

判斷字串是否只包含十進位數字字元,包括多國語言的十進位數字字元表現形式。如:

代碼如下:

‘3'.isdecimal() -->True
‘\u0660'.isdeciaml() -->True


其它語言的十進位數字形式參考:http://www.fileformat.info/info/unicode/category/Nd/list.htm

str.isdigit():

判斷字串是否只包含數字,這裡的數字包括十進位數字和其它特殊數字(如上標數字等)。一般地,一個數字是擁有如下屬性值的字元:Numeric_Type=Digit或Numeric_Type=Decimal。

str.isnumeric():

判斷字串是否只包含數字字元。數字字元範圍很大,一般來說,數字字元是擁有如下屬性值的字元:Numeric_Type=Digit, Numeric_Type=Decimal或Numeric_Type=Numeric。
比較isdecimal()、isdigit()、isnumeric(),幾個方法檢測的範圍依次擴大。


格式化類方法,返回一個格式化的新字串:

str.encode(encoding=”utf-8”, errors=”strict”):

將字串以utf-8格式進行編碼。

str.lower():

把全部字母字元轉換成小寫,不去管其它非字母字元。字串全部為非字母字元也是合法的,但返回原字串。如:

代碼如下:


'中國123ABC'.lower() --> '中國123abc'
‘中國123'.lower() -->'中國123' //不會報錯,返回原字串

str.upper():

與str.lower()相反,把全部字母字元轉換成大寫。如:

代碼如下:


'中國123abc'.upper() --> '中國123ABC'
'中國123'.upper() -->'中國123'

str.swapcase():

把字串中的大小寫字母互換,大寫轉換成小寫,小寫轉換成大寫。不去管非字母類字元。如:

代碼如下:


'中國123Ab'.swapcase() -->'中國123aB'
'中國123'.swapcase() -->'中國123' //不會報錯,返回原字串


str.capitalize():

字串首字母大寫,其餘小寫。如果字串首字元為非字母字元,將返回原字串。字串僅包含非字母字元合法,但返回原字串。如:

代碼如下:


'ab cd'.capitalize() -->'Ab cd' //只轉換字串的首字母
'中國ab 123cd'.capitalize() -->'中國ab 123cd' //首字元為非字母字元,返回原字串
'中國 123'.capitalize() -->'中國 123' //不會報錯,返回原字串

str.title():

字串中每個單詞的首字母大寫,其餘小寫。單詞的首字元為非字母字元也不影響轉換。字串僅包含非字母字元合法,但返回原字串。如:

代碼如下:


'ab cd'.title() -->'Ab Cd' //字串中每個單詞的首字母大寫
'中國ab 123cd'.title() -->'中國Ab 123Cd' //即使首字元為非字母字元,也可以進行轉換
'中國 123'.title() -->'中國 123'

str.center(width[,fillchar]):

返回一個原字串置中,長度為width的新字串,width要大於len(str),否則返回原字串,原字串開頭和結尾處使用fillchar進行填充,預設為空白格。
註:width為偶數時,fillchar將平均地填充到原字串的開頭和結尾;為奇數時,fillchar優先填充前面。如:

代碼如下:


'abcd'.center(3) -->'abcd'
'abcd'.center(8) -->' abcd '
'abcd'.center(8, *) -->'**abcd**'
'abcd'.center(7, *) -->'**abcd*'

str.ljust(width[, fillchar]):

返回一個長度為width,靠左對齊的字串,最右邊填充fillchar,預設為空白格。width要大於len(str),否則返回原字串。如:

代碼如下:


‘abcd'.ljust(10) -->'abcd ‘

str.rjust(width[, fillchar]):

與str.ljust()類似,但是它返回一個靠右對齊的字串,最左邊填充fillchar。

str.lstrip([chars]):

返回一個去除前了導字元的新字串,chars參數是一個字串,它包含了所有將要被移除的字元集合。預設為空白格。
註:關於lstrip函數(包括rstrip和strip),網上有很多文章,但都講的不清不楚。它實際的意思是,從原字串的最左邊開始,匹配chars裡包含的所有字元,直至遇到第一個非chars字元為止,原字串中匹配到的所有字元都被移除。

代碼如下:


‘www.example.com'.lstrip(‘cmowz.') -->example.com


從字串的最左邊開始匹配,直至遇到了非chars字元e為止,一共匹配了3個w字元和一個.字元,遇到e匹配結束。

代碼如下:


'xyxxyy testyx yx yyx'.lstrip('xy ') -->'testyx yx yyx'


從字串的最左邊開始匹配,直至遇到非chars字元t為止,一共匹配了三個x三個y,和一個空格,遇到t匹配結束。

str.rstrip([chars]):
與str.lstrip()相反,從最右邊開始匹配。

代碼如下:


'xyxxyy testyx yx yyx'.rstrip('xy ') -->'xyxxyy test'

str.strip([chars]):
從字串的兩頭開始匹配。

代碼如下:


'xyxxyy testyx yx yyx'.strip('xy ') -->test

str.expandtabs([tabsize]):
把字串中的所有定位字元替換成零個或多個空格,每個定位字元替換成多少個空格,由定位字元在字串中的位置和tabsize共同決定。tabsize指定每個定位字元替換成的空格數,預設為8個。如:

代碼如下:


'\t\t this\tis test.'.expandtabs(8) -->' this is test.'


上述樣本中,前兩個\t,每個都替換成了8個空格,而第三個\t貌似只替換成了4個。實際上不然,因為定位字元的製表位是從每行開頭算起的,所以第三個定位字元的製表位是從行首開始的第24個位置,剛好在is的i前面,而不是從this後面開始算的第8個位置。這就是所謂的共同決定。

str.zfill(width):
返回一個長度為width的數字字串,最左邊填充0。如果width小於等於原字串長度,則返回原字串。主要用於數字類字串的格式化。如:

代碼如下:


'abc'.zfill(5) --> '00abc' //一般不會做這種格式化,沒什麼意義
'123'.zfill(5) --> '00123'

尋找 & 替換類方法:

str.count(sub[, start[, end]]):

統計某個字元中子字串sub的個數。start和end指定統計範圍,未指定則預設全字串範圍內統計。如:

代碼如下:


'abcdabac'.count('ab') -->2
'abcdabac'.count('ab', 2,) -->1

str.find(sub[, start[, end]]):
尋找子字串在字串中出現的第一個位置,start和end指定一個尋找範圍。未找到返回-1。

代碼如下:


'0123234'.find('23') -->2
'0123234'.find('23', 1) -->2


註:1、find尋找的是子字串在全字串中出現的第一個位置,匹配到字串就結束尋找,不管後面還有沒有匹配的字串。
2、find尋找的是子字串在全字串出現的第一個位置,而不是指定切片中的第一個位置。
3、如果僅想判斷子字串是否在某一字串中,用in判斷符即可,無需find。

str.rfind(sub[, start[, end]]):
跟find方法一樣,返回指定子串的index位置,只不過rfind從字串的最右邊開始尋找,找不到時返回-1。注意:從最右邊開始尋找,但index位置卻是從原字串的最左邊開始算的。如:

代碼如下:


'ABCDEEF'.find('E') -->4 //從最左邊開始尋找,從A到第一個D後面的E結束,返回索引值4
'ABCDEEF'.rfind('E') -->5 //從最右邊開始尋找,從A到第一個F前面的E結束,返回索引值5

str.format(*args, **kwargs):
調用fortmat方法的字串中不但有純文字,也有使用{}界定符包括起來的替換欄位。替換欄位既可以是位置參數的數值索引,也可以是字典或屬性的Key值。該方法返回的字串裡,所有替換欄位都被相應參數的值所替代。如:

代碼如下:


‘User ID: {0}'.format(‘root') -->User ID: root
‘User ID: {UID} Last login: {last_login}'.format(UID = ‘root', last_login = ‘5 Mar 2012') -->User ID: root Last login: 5 Mar 2012

str.index(sub[, start[, end]]):

類似str.find(),但是如果沒有找到子串,返回raised ValueError。

str.rindex(sub[, start[, end]]):

類似於str.rfind(),但是如果沒有找到,返回raises ValueError。

str.replace(old, new[, count]):
返回一個新字串,原串中的old被替換為new,country指定替換次數。如:

代碼如下:


'AAABBBCCC'.replace('A', 'D') -->DDDBBBCCC
'AAABBBCCC'.replace('A', 'D', 2) -->DDABBBCCC

static str.maketrans(x[, [y, z]]):
這個方法我不是很明白,特別是它還有一個static修飾符。
大致上,它的用途是返回一個轉換表,以供str.translate()方法使用,兩個方法常配合使用。
如:

代碼如下:


table = str.maketrans('cs', 'kz')
"please don't knock at my door!".translate(table) -->"pleaze don't knokk at my door!" //'c'被替換成了k,'s'被替換成了z。說明參數可以包含多個字元,但第一個參數包含的字元數和第二個參數包含的字元數必須相等。

table = str.maketrans('cs', 'kz', 'o')
"please don't knock at my door!".translate(table) -->"pleaze dn't knkk at my dr!" //如果有三個參數,則第三個參數的意思是刪除原字串中的相應字元。

str.translate(map):

和str.maketrans()函數配合使用,替換相應的字元。


拆分 & 組合類別方法:

str.partition(sep):

該方法用於拆分字串,返回一個包含三個元素的元組。如果未能在原字串中找到Sep,則元組的三個元素為:原字串,空串,空串;否則,從原字串中遇到的第一個Sep字元開始拆分,元組的三個元素為:Sep之前的字串,Sep字元,Sep之後的字串;如:

代碼如下:


'abcdee'.partition('f') --> ('abcdee', '', '')
'abcdee'.partition('e') --> ('abcd', 'e', 'e')

str.rpartition(sep):

與str.partition()相反,從原字串的最右邊開始拆分,但是同樣返回包含三個元素的元組:倒數第一個Sep之前的字串,Sep字元,Sep之後的字串。
注意”倒數Sep之前的字串”,這個之前的字串,是從原字串的最左邊開始算,並不是最右邊。如:

代碼如下:


'abcdee'.rpartition('e') --> ('abcde', 'e', '') //拆分的三個元素分別是:倒數第一個e之前的元素,e本身,e之後的元素,此外為空白格
'abcdee'.rpartition('f') --> ('', '', 'abcdee') //拆分的三個元素分別是:空格,空格,原字串

str.split([sep[, maxsplit]]):

返回一個以Sep分隔的列表,maxsplit指定拆分次數(因此,列表中元素的個數為maxsplit + 1)。Sep預設為空白格,maxsplit預設不限制拆分次數。
注意:1)如果未指定Sep或指定Sep為None(''),str兩端的空格將捨棄;如果指定Sep(不管能否在原字串中找到Sep),str兩端的空格將保留
2)如果未能在原字串中找到Sep,則返回一個僅包含一個元素的列表,這個元素就是原字串。
如:

代碼如下:


' abcbdbee '.split() --> ['abcbdbee'] //未指定Sep,返回僅包含一個元素的列表,捨棄str兩端的空格
' abcbdbee '.split('f') --> [' abcbdbee '] //指定f為Sep(雖然找不到f),返回僅包含一個元素的列表,保留兩端的空格
' abcbdbee '.split('b') --> [' a', 'c', 'd', 'ee '] //指定b為Sep,不限定拆分次數,str兩端的空格被保留
' abcbdbee '.split('b', 2) --> [' a', 'c', 'dbee '] //以b為分隔字元,拆分兩次

註:有點像str.partition(),但是str.partition()返回一個元組,而且分隔字元Sep是元組中的一個元素;而str.split(0返回一個列表,分隔字元Sep不在列表中

str.rsplit([sep[, maxsplit]]):

與str.split()類似,只是它從最右邊開始拆分。只有在指定maxsplit的情況下才會看到效果。如:

代碼如下:


'abcbdbee'.rsplit('b') --> ['a', 'c', 'd', 'ee'] //不指定maxsplit,返回的結果與str.split()相同
'abcbdbee'.rsplit('b', 2) --> ['abc', 'd', 'ee'] //可以看出與str.split(‘b', 2)的差別

str.join(iterable):

使用串連符str來串連iterable對象中的元素,返回一個被str串連起來的,由iterable對象的元素組成的字串。如果傳入一個非iterable對象,如整數、布爾值等,將返回Type Error。 如:

代碼如下:


‘A B'. join(['1', '2', '中國']) -->1A B2A B中國
‘A B'.join(‘12中國') -->1A B2A B中國
‘A B'.join(123) -->Type Error


註:iterable object或iterator type最主要的特徵是支援兩個函數:__iter__()和__next__(),雖然不是很準確,但可以簡單的認為支援使用for語句逐個取值的資料類型都是迭代器對象。
sequence type(六種:strings、byte objects、byte arrays、lists、tuples、range objects)和dictionary都屬於iterable對象。

str.splitlines([keepends]):

拆分一個包含多行的字串,以每行為一個元素返回一個列表。如果字串不是多行的,則返回原字串。keepends是一個True字元或非零整數,表示保留行尾標誌。該方法多用於處理檔案。如:

代碼如下:


Line = ‘AB
CD
EF'''
Line.splitlines() -->['AB', 'CD', 'EF']

Line = 'AB\nCD\nEF'
Line.splitlines() -->['AB', 'CD', 'EF']

Line = 'AB\nCD\nEF'
Line.splitlines(True) --> ['AB\n', 'CD\n', 'EF']

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.