天天看點

Python3學習筆記 | 五、Python的類型與運算-字元串(下)一、字元串方法1、大小寫2、排版3、查找4、格式判斷5、字元分割6、其他二、字元串格式化表達式1、格式化代碼(typecode)2、例子三、字元串格式化方法

一、字元串方法

除表達式之外,字元串還提供了一系列的方法去實作更複雜的文本處理任務。方法是與特定的對象相關聯在一起的函數。從技術角度來講,它們附屬于對象的屬性,而這些屬性不過是些調用函數罷了。在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%'           

複制