Python 字符串方法详解
生活随笔
收集整理的這篇文章主要介紹了
Python 字符串方法详解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?Python?字符串方法詳解
本文最初發(fā)表于賴勇浩(戀花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙轉(zhuǎn)載,敬請保留全文完整,切勿去除本聲明和作者信息。
在編程中,幾乎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是平臺相關(guān)的,它使用的內(nèi)碼依賴于操作系統(tǒng)環(huán)境,而unicode是平臺無關(guān)的,是Python內(nèi)部的字符串存儲方式。unicode可以通過編碼(encode)成為特定編碼的str,而str也可以通過解碼(decode)成為unicode。 |
?
附注:
1)C++ 中可以通過 boost.string_algo 庫來獲得同樣方便的字符串處理能力。
2)這些字符串方法在 python1.6 版本才開始提供,如果你使用的python版本非常老,可能需要使用string模塊來獲得這些方便的算法。
總結(jié)
以上是生活随笔為你收集整理的Python 字符串方法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python、Lua和Ruby比较——脚
- 下一篇: 简明 Python 编程规范v2