Python字符串的基本用法總結

    字符串序列用於表示和存儲文本,python中字符串是不可變對象。通常由單引號(' ),雙引號(" ),三引號(''' """)包圍,其中三引號可以由多行組成,編寫多行文本的快捷語法,常用語文檔字符串,在文件的特定地點,被當做註釋。便捷的多行註釋。

Python實際三類字符串:

1.通常意義字符串(str)

2.原始字符串,以大寫R 或 小寫r開始,r'',不對特殊字符進行轉義

3.Unicode字符串,u'' basestring子類

python中字符串支持索引、切片操作。

(1)一個小技巧

    先來說個小技巧吧,對於怎麼編寫多行字符串,除了用三個連續的雙引號外,還要一個小技巧,看下面代碼。

#coding=utf-8
s = ('select *'
     'from atable'
     'where id=888')
print s

輸出的結果是'select *from atablewhere id=888'。python中有個這樣的特性:python中遇到未閉合的小括號時會自動將多行代碼拼接爲一行和把相鄰的兩個字符串字面量拼接到一起。相比使用三個連續的單(雙)引號,這種方式不會把換行符和前導空格也當作字符串的一部分。

注意:上面的例子,s不是元組,需要在後面加逗號纔會是元組,如下

#coding=utf-8
s = ('select *'
     'from atable'
     'where id=888',)
print s,type(s)

結果如下:

('select *from atablewhere id=888',) <type 'tuple'>


(2)如何判斷一個對象是不是字符串

    python中字符串有兩重,一種是str,一種是unicode。那如何判斷一個對象是不是字符串呢?應該使用isinstance(s,basestring),而不是isinstance(s,str)。看下面例子

>>>a = 'hi'

>>>isinstance(a,str)

True

>>>b = u'Hi'

>>>isinstance(b,str)

False

>>>isinstance(b,basestring)

True

>>>isinstance(b,unicode)

True

>>>isinstance(a,unicode)

False


要正確判讀一個對象是不是字符串,要有basestring,因爲basestring是str和unicode的基類,包含了普通字符串和unicode類型。


(3)str對象的基本用法

字符串的基本用法可以分以下五類,即性質判定、查找替換、分切與連接、變形、填空與刪減。

(a)性質判定

性質判定有以下幾個方法。

isalnum():是否全是字母和數字,並至少有一個字符

isalpha():是否全是字母,並至少有一個字符 

isdigit():是否全是數字,並至少有一個字符

islower():字符串中字母是否全是小寫

isupper():字符串中字母是否全是小寫

isspace():是否全是空白字符,並至少有一個字符

istitle():判斷字符串是否每個單詞都有且只有第一個字母是大寫

startswith(prefix[,start[,end]]):用於檢查字符串是否是以指定子字符串開頭,如果是則返回 True,否則返回 False。如果參數 start 和 end 指定值,則在指定範圍內檢查。

endswith(suffix[,start[,end]]):用於判斷字符串是否以指定後綴結尾,如果以指定後綴結尾返回True,否則返回False。可選參數"start"與"end"爲檢索字符串的開始與結束位置。

is*()這些都比較簡單,從字母的字面上就可以理解,*with()函數可以接受start和end參數,如果善加利用可以優化性能。另外,從python 2.5版本起,*with()函數族的第一個參數可接受tuple類型實參,當實參中某個元素匹配時,即返回True。


(b)查找與替換

count(sub[,start[,end]]):統計字符串裏某個字符sub出現的次數。可選參數爲在字符串搜索的開始與結束位置。這個數值在調用replace方法時用得着。

find(sub[,start[,end]]):檢測字符串中是否包含子字符串sub,如果指定start(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,如果包含子字符串返回開始的索引值,否則返回-1

index(sub[,start[,end]]):跟find()方法一樣,只不過如果sub不在 string中會拋出ValueError異常。

rfind(sub[,start[,end]]):類似於 find()函數,不過是從右邊開始查找。

rindex(sub[,start[,end]]):類似於 index(),不過是從右邊開始。

replace(old,new[,count]):用來替換字符串的某些子串,用new替換old。如果指定count參數話,就最多替換count次,如果不指定,就全部替換


    前面五個方法都可以接受start、end參數,善加利用可以優化性能。對於查找某個字符串中是否有子串,不推薦使用index族和find族方法,推薦使用in和not in操作


(c)分切與連接

partition(sep):用來根據指定的分隔符將字符串進行分割,如果字符串包含指定的分隔符,則返回一個3元的元組,第一個爲分隔符左邊的子串,第二個爲分隔符本身,第三個爲分隔符右邊的子串。如果sep沒有出現在字符串中,則返回值爲(sep,",")。partition() 方法是在2.5版中新增的。

rpartition(sep):類似於 partition()函數,不過是從右邊開始查找.

splitness([keepends]):按照行('\r', '\r\n', \n')分隔,返回一個包含各行作爲元素的列表,如果參數 keepends 爲 False,不包含換行符,如果爲 True,則保留換行符。

split(sep[,maxsplit]]):通過指定分隔符對字符串進行切片,如果參數maxsplit 有指定值,則僅分隔 maxsplit 個子字符串,返回分割後的字符串列表。

rsplit(sep[,maxsplit]]):同split(),不過是從右邊開始。

看下面例子

str1 = 'ab c\n\nde fg\rkl\r\n'
print str1.splitlines();

str2 = 'ab c\n\nde fg\rkl\r\n'
print str2.splitlines(True)

輸出如下:

['ab c', '', 'de fg', 'kl']

['ab c\n', '\n', 'de fg\r', 'kl\r\n']


split()函數有個小陷阱,比如對於字符串s,s.split()和s.split(" ")的返回值不同。看下面代碼

s = "  hello world"#前面有兩個空格
print s.split()
print s.split(' ')

輸出結果如下

['hello', 'world']

['', '', 'hello', 'world']

這是爲什麼呢?原因在於:當忽略sep參數或者sep參數爲None時與明確給sep賦予字符串值時,split()採用了兩種不同的算法。對於前者,split()先除去兩端的空白符,然後以任意長度的空白符串作爲界定符分切字符串(即連續空白符串會被單一空白符看待);對於後者則認爲兩個兩個連續空白符之間存在一個空字符串,因此對空字符串,它們的返回值也不同。

>>>".split()

[]

>>>''.split(' ')

['']

(d)變形

lower():轉換字符串中所有大寫字符爲小寫。

upper():將字符串中的小寫字母轉爲大寫字母。

capitalize():將字符串的第一個字母變成大寫,其他字母變小寫。對於 8 位字節編碼需要根據本地環境。

swapcase():用於對字符串的大小寫字母進行轉換,大寫轉小寫,小寫轉大寫。

title():返回"標題化"的字符串,就是說所有單詞都是以大寫開始,其餘字母均爲小寫。

這些都是大小寫切換,title()並不能除去字符串兩端的空白符也不會把連續空白符替換成一個空格,如果有這樣的需求,可以用string模塊的capwords(s)函數,它能除去兩端空白符,並且能將連續的空白符用一個空格符代替。看下面例子:

#coding=utf-8
import string
s = "   hello   world"
print s.title()
print string.capwords(s)

輸出結果如下:

   Hello   World

Hello World

(e)刪減與填充

strip([chars]):用於移除字符串頭尾指定的字符(默認爲空格),如果有多個就會刪除多個。

ltrip([chars]):用於截掉字符串左邊的空格或指定字符。

rtrip([chars]):用於截掉字符串右邊的空格或指定字符。

center(width[,fillchar]):返回一個原字符串居中,並使用fillchar填充至長度 width 的新字符串。默認填充字符爲空格

ljust(width[,fillchar]):返回一個原字符串左對齊,並使用fillchar填充至指定長度的新字符串,默認爲空格。如果指定的長度小於原字符串的長度則返回原字符串。

rjust(width[,fillchar]):返回一個原字符串右對齊,並使用fillchar填充至長度 width 的新字符串。如果指定的長度小於字符串的長度則返回原字符串。

zfill(width):返回指定長度的字符串,原字符串右對齊,前面填充0

expandtabs([tabsize]):把字符串中的 tab 符號('\t')轉爲適當數量的空格,默認情況下是轉換爲8個。





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