在編程中,幾乎90% 以上的代碼都是關(guān)于整數(shù)或字符串操作,,所以與整數(shù)一樣,,Python 的字符串實(shí)現(xiàn)也使用了許多拿優(yōu)化技術(shù),使得字符串的性能達(dá)到極致,。與 C++ 標(biāo)準(zhǔn)庫(STL)中的 std::string 不同,,python 字符串集合了許多字符串相關(guān)的算法,以方法成員的方式提供接口,,使用起來非常方便,。 字符串方法大約有幾十個(gè),這些方法可以分為如下幾類(根據(jù) manuals 整理):
類型
|
方法
|
注解
|
填充
|
center(width[, fillchar]) ,
ljust(width[, fillchar]),
rjust(width[, fillchar]),
zfill(width),
expandtabs([tabsize])
|
l fillchar 參數(shù)指定了用以填充的字符,,默認(rèn)為空格
l 顧名思義,,zfill()即是以字符0進(jìn)行填充,在輸出數(shù)值時(shí)比較常用
l expandtabs()的tabsize 參數(shù)默認(rèn)為8,。它的功能是把字符串中的制表符(tab)轉(zhuǎn)換為適當(dāng)數(shù)量的空格,。
|
刪減
|
strip([chars]),
lstrip([chars]),
rstrip([chars])
|
*strip()函數(shù)族用以去除字符串兩端的空白符,空白符由string.whitespace常量定義,。
|
變形
|
lower(),
upper(),
capitalize(),
swapcase(),
title()
|
title()函數(shù)是比較特別的,,它的功能是將每一個(gè)單詞的首字母大寫,并將單詞中的非首字母轉(zhuǎn)換為小寫(英文文章的標(biāo)題通常是這種格式),。
>>> 'hello wORld!'.title()
'Hello World!'
因?yàn)閠itle() 函數(shù)并不去除字符串兩端的空白符也不會(huì)把連續(xù)的空白符替換為一個(gè)空格,,所以建議使用string 模塊中的capwords(s)函數(shù),,它能夠去除兩端的空白符,再將連續(xù)的空白符用一個(gè)空格代替,。
>>> ' hello world!'.title()
' Hello World!'
>>> string.capwords(' hello world!')
'Hello World!'
|
分切
|
partition(sep),
rpartition(sep),
splitlines([keepends]),
split([sep [,maxsplit]]),
rsplit([sep[,maxsplit]])
|
l *partition ()函數(shù)族是2.5版本新增的方法,。它接受一個(gè)字符串參數(shù),并返回一個(gè)3個(gè)元素的 tuple 對象,。如果sep沒出現(xiàn)在母串中,,返回值是 (sep, ‘’, ‘’);否則,,返回值的第一個(gè)元素是 sep 左端的部分,,第二個(gè)元素是 sep 自身,第三個(gè)元素是 sep 右端的部分,。
l 參數(shù) maxsplit 是分切的次數(shù),,即最大的分切次數(shù),所以返回值最多有 maxsplit+1 個(gè)元素,。
l s.split() 和 s.split(‘ ‘)的返回值不盡相同
>>> ' hello world!'.split()
['hello', 'world!']
>>> ' hello world!'.split(' ')
['', '', 'hello', '', '', 'world!']
產(chǎn) 生差異的原因在于當(dāng)忽略 sep 參數(shù)或sep參數(shù)為 None 時(shí)與明確給 sep 賦予字符串值時(shí) split() 采用兩種不同的算法,。對于前者,split() 先去除字符串兩端的空白符,,然后以任意長度的空白符串作為界定符分切字符串(即連續(xù)的空白符串被當(dāng)作單一的空白符看待),;對于后者則認(rèn)為兩個(gè)連續(xù)的 sep 之間存在一個(gè)空字符串。因此對于空字符串(或空白符串),,它們的返回值也是不同的:
>>> ''.split()
[]
>>> ''.split(' ')
['']
|
連接
|
join(seq)
|
join() 函數(shù)的高效率(相對于循環(huán)相加而言),,使它成為最值得關(guān)注的字符串方法之一。它的功用是將可迭代的字符串序列連接成一條長字符串,,如:
>>> conf = {'host':'127.0.0.1',
... 'db':'spam',
... 'user':'sa',
... 'passwd':'eggs'}
>>> ';'.join("%s=%s"%(k, v) for k, v in conf.iteritems())
'passswd=eggs;db=spam;user=sa;host=127.0.0.1'
|
判定
|
isalnum(),
isalpha(),
isdigit(),
islower(),
isupper(),
isspace(),
istitle(),
startswith(prefix[, start[, end]]),
endswith(suffix[,start[, end]])
|
這些函數(shù)都比較簡單,顧名知義,。需要注意的是*with()函數(shù)族可以接受可選的 start, end 參數(shù),,善加利用,可以優(yōu)化性能,。
另,,自 Py2.5 版本起,*with() 函數(shù)族的 prefix 參數(shù)可以接受 tuple 類型的實(shí)參,,當(dāng)實(shí)參中的某人元素能夠匹配,,即返回 True。
|
查找
|
count( sub[, start[, end]]),
find( sub[, start[, end]]),
index( sub[, start[, end]]),
rfind( sub[, start[,end]]),
rindex( sub[, start[, end]])
|
find()函數(shù)族找不到時(shí)返回-1,,index()函數(shù)族則拋出ValueError異常
另,,也可以用 in 和 not in 操作符來判斷字符串中是否存在某個(gè)模板。
|
替換
|
replace(old, new[,count]),
translate(table[,deletechars])
|
l replace()函數(shù)的 count 參數(shù)用以指定最大替換次數(shù)
l translate() 的參數(shù) table 可以由 string.maketrans(frm, to) 生成
l translate() 對 unicode 對象的支持并不完備,,建議不要使用,。
|
編碼
|
encode([encoding[,errors]]),
decode([encoding[,errors]])
|
這 是一對互逆操作的方法,,用以編碼和解碼字符串。因?yàn)閟tr是平臺(tái)相關(guān)的,,它使用的內(nèi)碼依賴于操作系統(tǒng)環(huán)境,,而unicode是平臺(tái)無關(guān)的,是Python 內(nèi)部的字符串存儲(chǔ)方式,。unicode可以通過編碼(encode)成為特定編碼的str,,而str也可以通過解碼(decode)成為unicode。
|
|
|