Python 字符串方法詳解

Python 字符串方法詳解

本文最初發表於賴勇浩(戀花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙轉載,敬請保留全文完整,切勿去除本聲明和做者信息。python

       在編程中,幾乎90% 以上的代碼都是關於整數或字符串操做,因此與整數同樣,Python 的字符串實現也使用了許多拿優化技術,使得字符串的性能達到極致。與 C++ 標準庫(STL)中的 std::string 不一樣,python 字符串集合了許多字符串相關的算法,以方法成員的方式提供接口,使用起來很是方便。 字符串方法大約有幾十個,這些方法能夠分爲以下幾類(根據 manuals 整理):
類型
方法
註解
填充
center(width[, fillchar]) ,
ljust(width[, fillchar]),
rjust(width[, fillchar]),
zfill(width),
expandtabs([tabsize])
l          fillchar 參數指定了用以填充的字符,默認爲空格
l          顧名思義,zfill()便是以字符0進行填充,在輸出數值時比較經常使用
l          expandtabs()的tabsize 參數默認爲8。它的功能是把字符串中的製表符(tab)轉換爲適當數量的空格。
刪減
strip([chars]),
lstrip([chars]),
rstrip([chars])
*strip()函數族用以去除字符串兩端的空白符,空白符由string.whitespace常量定義。
變形
lower(),
upper(),
capitalize(),
swapcase(),
title()
title()函數是比較特別的,它的功能是將每個單詞的首字母大寫,並將單詞中的非首字母轉換爲小寫(英文文章的標題一般是這種格式)。
>>> 'hello wORld!'.title()
'Hello World!'
由於title() 函數並不去除字符串兩端的空白符也不會把連續的空白符替換爲一個空格,因此建議使用string 模塊中的capwords(s)函數,它可以去除兩端的空白符,再將連續的空白符用一個空格代替。
>>> ' 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()函數族是2.5版本新增的方法。它接受一個字符串參數,並返回一個3個元素的 tuple 對象。若是sep沒出如今母串中,返回值是 (sep, ‘’, ‘’);不然,返回值的第一個元素是 sep 左端的部分,第二個元素是 sep 自身,第三個元素是 sep 右端的部分。
l          參數 maxsplit 是分切的次數,即最大的分切次數,因此返回值最多有 maxsplit+1 個元素。
l          s.split() 和 s.split(‘ ‘)的返回值不盡相同
>>> ' hello   world!'.split()
['hello', 'world!']
>>> ' hello   world!'.split(' ')
['', '', 'hello', '', '', 'world!']
產生差別的緣由在於當忽略 sep 參數或sep參數爲 None 時與明確給 sep 賦予字符串值時 split() 採用兩種不一樣的算法。對於前者,split() 先去除字符串兩端的空白符,而後以任意長度的空白符串做爲界定符分切字符串(即連續的空白符串被看成單一的空白符看待);對於後者則認爲兩個連續的 sep 之間存在一個空字符串。所以對於空字符串(或空白符串),它們的返回值也是不一樣的:
>>> ''.split()
[]
>>> ''.split(' ')
['']
鏈接
join(seq)
join() 函數的高效率(相對於循環相加而言),使它成爲最值得關注的字符串方法之一。它的功用是將可迭代的字符串序列鏈接成一條長字符串,如:
>>> 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]])
這些函數都比較簡單,顧名知義。須要注意的是*with()函數族能夠接受可選的 start, end 參數,善加利用,能夠優化性能。
另,自 Py2.5 版本起,*with() 函數族的 prefix 參數能夠接受 tuple 類型的實參,當實參中的某人元素可以匹配,即返回 True。
查找
count( sub[, start[, end]]),
find( sub[, start[, end]]),
index( sub[, start[, end]]),
rfind( sub[, start[,end]]),
rindex( sub[, start[, end]])
find()函數族找不到時返回-1,index()函數族則拋出ValueError異常
另,也能夠用 in 和 not in 操做符來判斷字符串中是否存在某個模板。
替換
replace(old, new[,count]),
translate(table[,deletechars])
l          replace()函數的 count 參數用以指定最大替換次數
l          translate() 的參數 table 能夠由 string.maketrans(frm, to) 生成
l          translate() 對 unicode 對象的支持並不完備,建議不要使用。
編碼
encode([encoding[,errors]]),
decode([encoding[,errors]])
這是一對互逆操做的方法,用以編碼和解碼字符串。由於str是平臺相關的,它使用的內碼依賴於操做系統環境,而unicode是平臺無關的,是Python內部的字符串存儲方式。unicode能夠經過編碼(encode)成爲特定編碼的str,而str也能夠經過解碼(decode)成爲unicode。

 

附註:git

1)C++ 中能夠經過 boost.string_algo 庫來得到一樣方便的字符串處理能力。算法

2)這些字符串方法在 python1.6 版本纔開始提供,若是你使用的python版本很是老,可能須要使用string模塊來得到這些方便的算法。編程

相關文章
相關標籤/搜索