1. 程式人生 > >python字符串內置方法

python字符串內置方法

.html uil alink fix read all title converts find

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

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(sub, start, end)

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

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(suffix, start, end)

如果字符串含有指定的後綴返回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

python字符串內置方法