python 學習筆記之string

在 編程中,幾乎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()函數是比較特別的,它的功能是將每一個單詞的首字母大寫,並將單詞中的非首字母轉換爲小寫(英文文章的標題通常是這種格式)。
>>> 'hellowORld!'.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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章