在程式設計中,幾乎90% 以上的**都是關於整數或字串操作,所以與整數一樣,python 的字串實現也使用了許多拿優化技術,使得字串的效能達到極致。與 c++ 標準庫(stl)中的 std::string不同,python 字串集合了許多字串相關的演算法,以方法成員的方式提供介面,使用起來非常方便。
型別
方法
註解
填充
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 =
>>> ';'.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。
附註:1)c++ 中可以通過 boost.string_algo 庫來獲得同樣方便的字串處理能力。
2)這些字串方法在 python1.6 版本才開始提供,如果你使用的python版本非常老,可能需要使用string模組來獲得這些方便的演算法。
Python 字串方法詳解
python 字串方法詳解 型別 方法 註解 填充 center width fillchar ljust width fillchar rjust width fillchar zfill width expandtabs tabsize l fillchar 引數指定了用以填充的字元,預設為空格...
Python 字串方法詳解
在程式設計中,幾乎90 以上的 都是關於整數或字串操作,所以與整數一樣,python 的字串實現也使用了許多拿優化技術,使得字串的效能達到極致。與 c 標準庫 stl 中的 std string不同,python 字串集合了許多字串相關的演算法,以方法成員的方式提供介面,使用起來非常方便。型別 方法...
Python 字串方法詳解
python 字串方法詳解 型別方法 註解填充 center width fillchar ljust width fillchar rjust width fillchar zfill width expandtabs tabsize lfillchar 引數指定了用以填充的字元,預設為空格 l顧...