python字符串內置方法


網上已經有很多,自己操作一遍,加深印象。

dir

dir會返回一個內置方法與屬性列表,用字符串'a,b,cdefg'測試一下

dir('a,b,cdefg')

得到一個列表

['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__init__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rmod__',
 '__rmul__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'capitalize',
 'casefold',
 'center',
 'count',
 'encode',
 'endswith',
 'expandtabs',
 'find',
 'format',
 'format_map',
 'index',
 'isalnum',
 'isalpha',
 'isdecimal',
 'isdigit',
 'isidentifier',
 'islower',
 'isnumeric',
 'isprintable',
 'isspace',
 'istitle',
 'isupper',
 'join',
 'ljust',
 'lower',
 'lstrip',
 'maketrans',
 'partition',
 'replace',
 'rfind',
 'rindex',
 'rjust',
 'rpartition',
 'rsplit',
 'rstrip',
 'split',
 'splitlines',
 'startswith',
 'strip',
 'swapcase',
 'title',
 'translate',
 'upper',
 'zfill']

雙下橫向開頭的字符串為內部方法或私有方法。剩下的就是能用到的字符串方法了。

str.capitalize()

首字母大寫

In:'a,b,cdefg'.capitalize()
Out: 'A,b,cdefg'

str.casefold()

把所有字母變為小寫,與lower類似,lower只支持英文字母A~Z,但是casefold可以把非英文變為小寫。

 

In:'B,b,cdEfg'.casefold()
Out: 'b,b,cdefg'

In:'B,b,cdEfg'.lower()
Out: 'b,b,cdefg'

官方:

str.casefold()

Return a casefolded copy of the string. Casefolded strings may be used for caseless matching.

Casefolding is similar to lowercasing but more aggressive because it is intended to remove all case distinctions in a string. For example, the German lowercase letter 'ß' is equivalent to "ss". Since it is already lowercase, lower() would do nothing to 'ß'casefold() converts it to "ss".

The casefolding algorithm is described in section 3.13 of the Unicode Standard.

New in version 3.3.

In:'ß'.lower()
Out: 'ß'

In:'ß'.casefold()
Out: 'ss'

str.center(width[, fillchar])

按照給定字符和總寬度居中顯示。比如,寬度為5的字符串‘11111’按照給定字符‘r’和總寬度8,顯示的是:5個原始字符居中,'r'填充,長度為8的字符串。

In:'11111'.center(8,'r')
Out: 'r11111rr'

str.count(substartend)

子字符串在原字符串中的個數。

sub -- 需要搜索的子字符串

start -- 字符串開始搜索的位置,不填默認0

end -- 字符串結束搜索的位置,不填為最后

In:'r11111rr'.count('1',1,5)
Out[39]: 4

str.encode(encoding="utf-8"errors="strict")

encoding -- 編碼方式

errors -- 錯誤的處理方案。默認為 'strict',是編碼錯誤引起一個UnicodeError。 其他可能得值有 'ignore'--‘ ’, 'replace'--‘?’, 'xmlcharrefreplace'-- 可擴展標記語言替換, 'backslashreplace'--反斜杠替代 以及codecs.register_error() 注冊的所有值。

 
          

'黨'.encode('ascii')
Traceback (most recent call last):

 
          

File "<ipython-input-52-eb91b915d522>", line 1, in <module>
'黨'.encode('ascii')

 
          

UnicodeEncodeError: 'ascii' codec can't encode character '\u515a' in position 0: ordinal not in range(128)



'
'.encode('ascii','replace') Out[48]: b'?' ''.encode('ascii','ignore') Out[49]: b'' ''.encode('ascii','xmlcharrefreplace') Out[50]: b'&#20826;' ''.encode('ascii','backslashreplace') Out[51]: b'\\u515a'

str.endswith(suffixstartend)

如果字符串含有指定的后綴返回True,否則返回False。

suffix -- 子字符串

start -- 長字符串中的開始位置,默認0

end -- 長字符中結束位置,默認最后

'B,b,cdEfg'.endswith('g')
Out[54]: True

'B,b,cdEfg'.endswith('Efg')
Out[55]: True

'B,b,cdEfg'.endswith('Ef')
Out[56]: False

'B,b,cdEfg'.endswith('Ef',1,8)
Out[57]: True

str.expandtabs(tabsize=8)

把Tab--‘\t’變為其他長度的空格符,'\t'默認為8,下面為官網的例子:

'01\t012\t0123\t01234'.expandtabs()
Out[101]: '01      012     0123    01234'

'01\t012\t0123\t01234'.expandtabs(16)
Out[102]: '01              012             0123            01234'

str.find(str, beg=0, end=len(string))

檢測字符串中是否包含子字符串 str ,beg(開始)到end(結束) 如果包含子字符串,則返回開始的(最小的)索引值,否則返回-1。默認為0和最后。

'B,b,cdEfcg'.find('c',6,9)
Out[106]: 8

'B,b,cdEfcg'.find('c')
Out[107]: 4

'B,b,cdEfcg'.find('h')
Out[108]: -1

str.rfind(str, beg=0, end=len(string))

用法與str.find一致,這個得到的是結束的(最大的)索引值。

str.format(*args**kwargs)

字符串格式化,通過{}代替傳統的%.*arg表示不可變參數--元組,**kwargs表示可變參數--字典

1.索引

{}里面為索引,0對應format中第一個元素。


'
我{}好人,你{}好人!'.format('','不是') Out[111]: '我是好人,你不是好人!' '我{1}好人,你{0}好人!'.format('','不是') Out[112]: '我不是好人,你是好人!' l = ['','不是'] '我{0[0]}好人,你{0[1]}好人!'.format(l) Out[118]: '我是好人,你不是好人!'

2.關鍵字

'我{我}好人,你{你}好人!'.format(我='',你='不是')
Out[121]: '我是好人,你不是好人!'

3.填充

'{0:*<10}'.format('')  #總長度為10,字符串在左面
Out[127]: '黨*********'

'{0:*>10}'.format('')  #總長度為10,字符串在右面
Out[128]: '*********黨'  

'{0:*^10}'.format('') #總長度為10,字符串居中
Out[129]: '****黨*****'

4.精度與進制

'{0:.2f}'.format(1/3)
Out[132]: '0.33'

'{0:b}'.format(8)    #二進制
Out[133]: '1000'

'{0:o}'.format(8)     #八進制
Out[134]: '10'

'{:,}'.format(111111111111111)  #千分位格式化
Out[135]: '111,111,111,111,111'

 str.format_map(mapping)

 與str.format(**mapping)類似,區別在於format_map直接用字典,而不是復制一個。下面是官方例子,其中Default是dict的一個子類。

class Default(dict):                      
    def __missing__(self, key):  
        return key
'{name} was born in {country}'.format_map(Default(name='Guide'))

Out[18]: 'Guide was born in country'

str.index(str, beg=0, end=len(string))

與str.find類似,區別在於,index如果找不到要尋到的字符,會得到ValueError,而find則返回-1。

'asdfghjkhl'.find('i')
Out[24]: -1

'asdfghjkhl'.index('i')
Traceback (most recent call last):

  File "<ipython-input-25-af5de9246bb5>", line 1, in <module>
    'asdfghjkhl'.index('i')

ValueError: substring not found

str.rindex(str, beg=0, end=len(string))

用法與str.rindex一致,這個得到的是結束的(最大的)索引值。

str.isalum()

如果字符串至少有一個字符,並且所有字符都是字母或數字則返回 True,否則返回 False。

'asdfghjkhl'.isalnum()
Out[26]: True

'asdfg.. hjkhl'.isalnum()
Out[27]: False

str.isalpha()

如果字符串至少有一個字符,並且所有字符都是字母或漢字則返回 True,否則返回 False。

str.isdecimal()     str.isdigit()     str.isnumeric()

3個都是判斷字符串是不是數字字符

差別:

str.isdecimal()  表面上就是: str 是阿拉伯數字123456這樣的為True,是漢字數字,羅馬數字為False,顯示的‘’不是‘’數字的b" "為Error。

str.isdigit() 除了漢字數字為False,其他數字都為True,包括單字節數字b" "。

str.isnumeric() 除了單字節數字b" "是Error,所有的數字都為True。

str.isidentifier()

檢測字符串是否是字母開頭。

'asdfghjkhl'.isidentifier()
Out[33]: True

'1asdfghjkhl'.isidentifier()
Out[34]: False

str.islower()

如果字符串中的所有字符都是小寫,並且至少有一個字符,則返回True,否則返回False。

'asdfghjkhl'.islower()
Out[37]: True

'asdfghjkHl'.islower()
Out[38]: False

str.isprintable()

判斷是不是都為可見/可打印字符

'asdf\nghjkHl'.isprintable()
Out[42]: False

'asdfghjkHl'.isprintable()
Out[43]: True

str.isspace()

判斷是否為空格字符(注意不是空)

''.isspace()
Out[44]: False

' '.isspace()
Out[45]: True

'ss'.isspace()
Out[46]: False

str.istitle()

字面上意思是:判斷字符串能不能做標題

'Wo Shi Hao Ren 1'.istitle()
Out[50]: True

'Wo Shi Hao Ren 黨'.istitle()
Out[51]: True

'Wo Shi Hao ren'.istitle()
Out[52]: False

'Wo Shi Hao Ren'.istitle()
Out[53]: True

str.title()

把字符串變為標題格式。

'wo shi hao ren'.title()
Out[140]: 'Wo Shi Hao Ren'

str.isupper()

與str.islower()對應,如果字符串中的所有字符都是大寫,並且至少有一個字符,則返回True,否則返回False。

str.join(string)

以str作為分隔符,將string所有的元素合並成一個新的字符串。若string為空,則TypeError。

'111'.join('asdfghjkl')
Out[55]: 'a111s111d111f111g111h111j111k111l'

'111'.join()
Traceback (most recent call last):

  File "<ipython-input-56-5fa735339586>", line 1, in <module>
    '111'.join()

TypeError: join() takes exactly one argument (0 given)

str.ljust(width,fillchar)

得到一個原始字符串左對齊,並使用fiichar填充至指定長度的新字符串。若指定的長度小於原字符串的長度則返回原始字符串。與format的填充用法相似。

width--指定長度

fillchar--填充字符串,默認空格字符。

'111'.ljust(50)
Out[57]: '111                                               '

'111'.ljust(50,'*')
Out[58]: '111***********************************************'
'{0:*<50}'.format('111')
Out[62]: '111***********************************************'

str.rjust(width,fillchar)

得到一個原始字符串右對齊,並使用fiichar填充至指定長度的新字符串。若指定的長度小於原字符串的長度則返回原始字符串。與format的填充用法相似。(用法與ljust一致)

str.lower()

把所有字母轉化為小寫,與str.upper()相對,與str.casefold()區別。

str.upper()

 把所有字母轉化為大寫。

str.lstrip(chars)

刪除str左邊所有出現在chars子字符串,chars為空時默認空格字符。

'     Wo Shi Hao ren   '.lstrip()
Out[67]: 'Wo Shi Hao ren   '

'Wo Shi Hao ren'.lstrip('fdsfsfW')
Out[68]: 'o Shi Hao ren'

'Wo Shi Hao ren'.lstrip('fdsfsfw')
Out[69]: 'Wo Shi Hao ren'

str.rstrip(chars)

與str.lstrip(chars)對應且方法一致,刪除str右邊所有出現在chars子字符串,chars為空時默認空格字符。

str.strip(chars)

與str.lstrip(chars)和str.rstrip(chars)用法一致,這個是刪除兩邊所有出現在chars子字符串,chars為空時默認空格字符。

'asdas'.strip('as')
Out[124]: 'd'

str.maketrans(intab,outtab)

得到一個用於str.translate()的映射,其實就是一個字典。

intab--是原始字符

outtab--翻譯后的字符,長度與in相等

intab = "abcde"
outtab = "12345"
name = "asdwgwegb"
x = ''.maketrans(intab, outtab)
name.translate(x)

Out[103]: '1s4wgw5g2'

ord('a')  #a的Unicode編碼
Out[104]: 97

x
Out[105]: {97: 49, 98: 50, 99: 51, 100: 52, 101: 53}

x就是maketrans得到的字典,字典中的映射是字符對應的Unicode編碼。

str.translate()

根據str.maketrans得到的字典翻譯str

str.partition(char)    str.split(char,count)

作用都是字符串分割

str.partition(char)根據字符串char分割str得到一個3元素元組(只識別第一次出現的字符串)。char不能為空

'asdsawoainiasdaswoainid'.partition('woaini')
Out[111]: ('asdsa', 'woaini', 'asdaswoainid')

'asdsawoainiasdaswoainid'.partition('woainid')
Out[112]: ('asdsawoainiasdas', 'woainid', '')

 str.split(char,count)  根據字符串char分割str得到一個列表(識別所有的char,並且char不包含在列表內),char默認為空格符。

char--子字符串

count--切割次數,默認全部。

'asdsawoainiasdaswoainid'.split('woaini')
Out[113]: ['asdsa', 'asdas', 'd']

'asdsawoainiasdaswoainid'.split()
Out[114]: ['asdsawoainiasdaswoainid']

'asdsawoainiasdaswo ainid'.split()
Out[115]: ['asdsawoainiasdaswo', 'ainid']

str.rpartition(char)

用法與str.partition(char)一致,str.rpartition(char)根據字符串char分割str得到一個3元素元組(只識別最后一次出現的字符串)。char不能為空

str.rsplit(char,count)

與str.split用法一致,但是str.rsplit是從后往前工作,str.split是簽到后工作。

'basdasa'.rsplit('as',1)
Out[131]: ['basd', 'a']

'basdasa'.split('as',1)
Out[132]: ['b', 'dasa']

str.splitlines(keepends)

str.splitlines(keepends) 按照行('\r', '\r\n', \n')分隔,得到各行元素的列表,如果keepends為 False,不包含換行符,如果為 True,則保留換行符。默認為False。

'asdsa\r\nwo\rainia\r\nsdas\nw\roainid'.splitlines()
Out[116]: ['asdsa', 'wo', 'ainia', 'sdas', 'w', 'oainid']

'asdsa\r\nwo\rainia\r\nsdas\nw\roainid'.splitlines(False)
Out[117]: ['asdsa', 'wo', 'ainia', 'sdas', 'w', 'oainid']

'asdsa\r\nwo\rainia\r\nsdas\nw\roainid'.splitlines(True)
Out[118]: ['asdsa\r\n', 'wo\r', 'ainia\r\n', 'sdas\n', 'w\r', 'oainid']

str.replace(old,new,count)

把字符串中的 old(舊字符串) 替換成 new(新字符串),替換不超過count 次,count為空時不限次數。

'asdas'.replace('as','sa',1)
Out[121]: 'sadas'

'asdas'.replace('as','sa')
Out[122]: 'sadsa'

str.startswith(start,end)

startswith() 方法用於檢查字符串是否是以指定字符串開頭,如果是返回True,否則返回False。start,end未指定范圍,默認0,len(str)-1

'basdasa'.startswith('ba')
Out[135]: True

'basdasa'.startswith('ba',1,5)
Out[136]: False

str.swapcase()

大寫變小寫,小寫變大寫

'basdasaDASDA'.swapcase()
Out[138]: 'BASDASAdasda'

str.zfill(width)

width--指定長度

在字符串str前面填充字符串‘0’,使長度為指定長度width。

'asdas'.zfill(10)
Out[141]: '00000asdas'

 

參考:https://docs.python.org/3/library/stdtypes.html#string-methods

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM