一、字元串方法
除表達式之外,字元串還提供了一系列的方法去實作更複雜的文本處理任務。方法是與特定的對象相關聯在一起的函數。從技術角度來講,它們附屬于對象的屬性,而這些屬性不過是些調用函數罷了。在Python中,表達式和内置函數可能在不同範圍的類型有效,但方法通常特定于對象類型,例如,字元串方法僅适用于字元串對象。
屬性讀取:
Object.attribute格式的表達式可以了解為“讀取object對象的屬性attribute值”
函數調用表達式:
具有函數(參數)格式的表達式意味着“調用函數代碼,傳遞零或者更多用逗号隔開的參數對象,最後傳回函數的傳回值”。
這兩者合并可以讓我們調用一個對象方法。
有如下幾種字元串方法:
大小寫相關:
• S.capitalize()/S.title()/S.upper()/S.lower()/S.swapcase()
排版相關:
• S.center(width[, fill])/ S.ljust(width[, fill])/S.rjust(width[, fill])/ S.expandtabs(tabsize)/S.zfill(width)
• S.strip([chars])/S.lstrip([chars])/S.rstrip([chars])
查找相關:
• S.startswith(prefix[, start[, end]])/S.endswith(suffix[ ,start[ ,end]])/ S.count(sub[, start[, end]])
• S.find(sub [, start[, end]])/S.rfind(sub[, start[, end]])/S.replace(old, new[, count])
• S.index(sub[, start[, end]])/S.rindex(sub[, start[, end]])
格式判斷:
• S.isalpha()/S.isdigit()/S.isalnum()/S.islower/S.isupper()/S.isspace()/S.istitle()
• S.isdecimal()/S.isnumeric()/S.isidentifier()/S.isprintable() - Python3.x
字元分隔:
• S.split([sep[, maxsplit]])/S.rsplit([sep[, maxsplit]])/S.splitlines([keepends])/S.partition(sep)/S.rpartition(sep)
其他:
• S.join(iterable)
• S.maketrans(x[, y[, z]])/S.translate(map) - Python3.x
• S.format()
1、大小寫
S.capitalize() - 第一個字母大寫,其餘都變成小寫字母。
>>> 'Dora EmON'.capitalize()
'Dora emon'
複制
S.title() - 每一詞的頭字母大寫,其餘都變成小寫字母。
>>> 'Dora EmON'.title()
'Dora Emon'
複制
S.upper() - 全改成大寫
>>> 'Dora EmON'.upper()
'DORA EMON'
複制
S.lower() - 全改成小寫
>>> 'Dora EmON'.lower()
'dora emon'
複制
S.swapcase() - 大小寫轉換
>>> 'Dora EmON'.swapcase()
'dORA eMon'
複制
2、排版
S.center(width[, fill])/ S.ljust(width[, fill])/S.rjust(width[, fill]) - 原來的字元擴到指定長度,再用fill來填充其餘空處,預設空格。中間對齊/左對齊/右對齊。
>>> 'DoraEmon'.center(15)
' DoraEmon '
>>> 'DoraEmon'.center(15,'十')
'十十十十DoraEmon十十十'
>>> 'DoraEmon'.ljust(15)
'DoraEmon
>>> 'DoraEmon'.rjust(15,'十')
'十十十十十十十DoraEmon'
複制
S.expandtabs(tabsize) - 更改tabs(在字元串裡”\t”)轉換為空格的數量,預設為8。
>>> 'Dora\tEmon'.expandtabs(8)
'Dora Emon'
>>> 'Dora\tEmon'.expandtabs(16)
'Dora Emon'
複制
S.zfill(width) - 原來的字元串擴到指定長度,前面使用0來填充,數字計算的時候會用到。
>>> 'DoraEmon'.zfill(15)
'0000000DoraEmon'
複制
S.strip([chars])/S.lstrip([chars])/S.rstrip([chars]) - 删除兩遍/左邊/右邊的指定字元(預設為空格和換行符)。
>>> ' DoraEmon\n '.strip()
'DoraEmon'
>>> ' DoraEmon\n '.lstrip()
'DoraEmon\n '
>>> ' DoraEmon\n '.rstrip()
' DoraEmon'
>>> ' DoraEmon\n '.strip('Em')
' DoraEmon\n '
複制
3、查找
在這裡所有的start和start, end看成是是S[start:]和S[start:end]
S.startswith(prefix[, start[, end]])/S.endswith(suffix[ ,start[ ,end]])- 以特定字元串開頭/結尾的,傳回真假。
>>> 'DoraEmon'.startswith('D')
True
>>> 'DoraEmon'.startswith('D',2,3)
False
>>> 'DoraEmon'.endswith('o',6,7)
True
複制
S.count(sub[, start[, end]])- 相應字元串在文本裡的個數。
>>> 'DoraEmon'.count('o')
2
>>> 'DoraEmon'.count('o',1,5)
1
複制
S.find(sub [, start[, end]])/S.rfind(sub[, start[, end]])- 查找第一個與sub比對的字元串位置,沒找到傳回-1。
>>> 'DoraEmon'.find('D')
0
>>> 'DoraEmon'.find('E')
4
>>> 'DoraEmon'.find('E',3,5)
4
>>> 'DoraEmon'.find('Q')
-1
複制
S.index(sub[, start[, end]])/S.rindex(sub[, start[, end]])- 與find差不多,但沒找到會傳回錯誤。
>>> 'DoraEmon'.index('D')
0
>>> 'DoraEmon'.index('E')
4
>>> 'DoraEmon'.index('E',3,5)
4
>>> 'DoraEmon'.index('Q')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
複制
S.replace(old, new[, count])- 查找old,替換成new,count是隻替換相應個數,預設全替換。
>>> 'DoraEmon'.replace('o','Xiong',)
'DXiongraEmXiongn'
>>> 'DoraEmon'.replace('o','Xiong',1)
'DXiongraEmon'
複制
4、格式判斷
傳回的值都是真或者假。
S.isalpha() - 判斷是不是字母
S.isdigit() - 判斷是否數字
S.isalnum() - 判斷是否數字和字母
S.islower() - 判斷是不是有字母而且是全小寫
S.isupper() - 判斷是不是有字母而且是全大寫
S.isspace() - 判斷是不是隻有空格和換行符号
S.istitle() - 判斷每個單詞第一個字母是不是大寫
>>> 'DoraEmon'.isalpha()
True
>>> 'DoraEmon'.isdigit()
False
>>> 'DoraEmon'.isalnum()
True
>>> 'DoraEmon'.islower()
False
>>> 'DoraEmon'.isupper()
False
>>> 'DoraEmon'.isspace()
False
>>> 'DoraEmon'.istitle()
False
複制
下面的隻有Python3.x開始支援
S.isdecimal() - 判斷是不是數字
S.isnumeric() - 判斷是不是數字
S.isidentifier() - 判斷字元能否成為辨別符
S.isprintable() - 判斷字元是否全部是能列印(print)的
>>> 'DoraEmon'.isdecimal()
False
>>> 'DoraEmon'.isnumeric()
False
>>> 'DoraEmon'.isidentifier()
True
>>> 'DoraEmon'.isprintable()
True
複制
5、字元分割
S.split([sep[, maxsplit]])/S.rsplit([sep[, maxsplit]])- 從左/右以sep(字元串)分隔,最多maxsplit次(預設無限)
>>> 'DoraEmon'.split('o')
['D', 'raEm', 'n']
>>> 'DoraEmon'.split('o',1)
['D', 'raEmon']
>>> 'DoraEmon'.rsplit('o',1)
['DoraEm', 'n']
複制
S.splitlines([keepends])- 以\n或者\r或者\r\n分隔
>>> 'D\no\rraEmo\r\nn'.splitlines()
['D', 'o', 'raEmo', 'n']
複制
S.partition(sep)/S.rpartition(sep)- 從左/右找第一個sep分隔,sep左邊的,sep,sep右邊的。
>>> 'DoraEmon'.partition('o')
('D', 'o', 'raEmon')
>>> 'DoraEmon'.rpartition('o')
('DoraEm', 'o', 'n')
複制
6、其他
S.join(iterable)
S.maketrans(x[, y[, z]])/S.translate(map)-建立對照表, 然後使用translate()函數, 調用對照表, 把字元串(string)中的字元, 進行相應的替換,這個在python2.x和python3.x完全不同。
S.format-字元串格式化方法,後面會詳細講解
>>> '-'.join('DoraEmon')
'D-o-r-a-E-m-o-n'
>>>
>>> D='DoraEmon'
>>> X=D.maketrans('Dora','DaXo')
>>> D.translate(X)'DaXoEman'
>>>
>>> 'DoraEmon{DA}'.format(DA=' And DaXiong')
'DoraEmon And DaXiong'
複制
二、字元串格式化表達式
這個格式化表達式與C語言的差不多。
>>> '%d%s%s4'%(1,'2','Three')
'12Three4'
複制
格式是字元串裡有%[(name)][flag][width][.precision]typecode加一個%, 再加上相應個數的元組(後面會講元組)
1、格式化代碼(typecode)
s 字元串(或任何對象)
r 與s一樣,但輸出方式是repr方式,而不是str
c 字元
d 十進制(整數)
i 整數
u 無号整數
o 八進制整數
x 十六進制整數
X 與x同樣,A-F是大寫
e 浮點指數
E 與e同樣,E是大寫
f 浮點數十進制
F 浮點數十進制
g 浮點e或f
G 浮點E或F
2、例子
>>> "%s | %r | %c" %("This is string","This is repr","C")
"This is string | 'This is repr' | C"
>>> "%d | %i | %o | %x | %x"%(3,5,11,13,15)
'3 | 5 | 13 | d | f'
>>> "%e | %E | %f | %F | %g | %G" %(1.5E3,1.5e3,13.5,13.5,1.5E13,13.5e15)
'1.500000e+03 | 1.500000E+03 | 13.500000 | 13.500000 | 1.5e+13 | 1.35E+16'
>>> "%(string)-10s" %({'string':'1'})
'1
>>> "%(float)+10.2f" % ({'float':3.1})
' +3.10'
>>> "%(float)-10.2f" % ({'float':3.1})
'3.10
複制
三、字元串格式化方法
在Python字元串方法裡有format方法,根據特定的格式在裡面輸入相應關鍵字。例:
‘What do you like, {0}, {1} or {2}’.format(“spam”, “eggs”, “ham”)
結果是’What do you like, spam, eggs, ham’
也可以換順序 :
‘What do you like, {2}, {1} or {0}’.format(“spam”, “eggs”, “ham”)
結果是’What do you like, ham, eggs, spam’
也可以使用相應的名字
‘What do you like, {ham}, {0} or {eggs}’.format(“spam”, eggs=”eggs”, ham=”ham”)
結果是’What do you like, ham, spam, eggs’
具體格式為:
{fieldname!conversionflag:formatspec}
fieldname是位置資訊或關鍵字,後面可以跟屬性或指針
conversionflag是r或者s,分别對應repr和str
formatspec是具體顯示方式,可以替代前面所使用過的其他字元串方法
fieldtype 使用屬性或指針
>>> import sys
>>> sys.platform
'win32'
>>> "{0.platform}".format(sys)
'win32'
>>> "{0[Dora]}".format({"Dora":"DoraEmon"})
'DoraEmon'
>>> dict1={"Dora":"DoraEmon"} #關于字典,後面會講到。
>>> dict1["Dora"]
'DoraEmon'
複制
當使用字典的時候需要引号來擴,但使用字元串格式化方法的時候不能使用引号
formatspec = [[fill]align][sign][#][0][width][,][.precision][type],fill和align再加上後面的width相當于方法裡的center,ljust,rjust
>>> "{:*^40}".format("start")
'*****************start******************'
>>> "{:*^40}".format("end")
'******************end*******************'
複制
這裡也是,fill必須是單個字元。
align有<左對齊,>右對齊,^中間顯示,=,在數字裡符号在最前,數字右對齊。
>>> print("{:=10}\n{:=+10}\n{:-^10}\n{:=+10}".format(10,3,'-',13))
10
+ 3
----------
+ 13
複制
sign的值是+,-和空格。當+的時候,即使是正數,也會顯示符号,-是隻有在負數時顯示符号(預設值),空格時,會為正數前面留下符号位
>>> "{:+}".format(10)
'+10'
>>> "{:-}".format(10)
'10'
>>> "{:-}".format(-10)
'-10'
>>> "{}".format(10)
'10'
>>> "{:}".format(10)
'10'
複制
隻有在數字顯示裡,顯示二進制數,八進制數,十六進制數的時候,需要顯示前面的0b,0o,0x的時候使用。
>>> "{0:#8b},{0:#8o},{0:#8x}".format(10)
' 0b1010, 0o12, 0xa'
>>> "{:,}".format(10000000)
'10,000,000'
>>> "{:08.5}".format(13.5767)
'0013.577'
複制
type跟之前使用%表示的相等。當字元時:使用s,預設就是s;當整數時:b,o,x和X是二進制、八進制、十六進制,c是數字按unicode轉成字元,d是正常十進制,預設是d。也可以使用n來代替d。
>>> "{0:d},{0:b},{0:o},{0:x},{0:X}".format(10)
'10,1010,12,a,A'
複制
浮點數時:e和E是指數,f和F是浮點數。g和G是同一的,也可以使用n來代替g,%是顯示百分比。
>>> "{0:e},{0:F},{0:g},{0:n},{0:%}".format(1.1)
'1.100000e+00,1.100000,1.1,1.1,110.000000%'
複制