常見字符串常量和表達式python
s = '' #空字符串 s = "spam's" #雙引號和單引號 s = 's\np\ta\x00m' #轉義序列 s = """...""" #三重引號字符串塊 s = r'\temp\spam' #Raw字符串 s = b'spam' #python3.0中的字節字符串 s = u'spam' #僅在python2.6中使用的unicode字符串 s1 + s2 #合併 s * 3 #重複 s[i] #索引 s [i:j] #分片 len(s) #求長度 "a %s parrot" % kind #字符串格式化表達式 "a {0} parrot".format(kind) #python2.6和python3.0的字符串格式方法 s.find('pa') #字符串方法:搜索 s.rstrip() #移除空格 s.replace('pa', 'xx') #替換 s.split(',') #用佔位符分割 s.isdigit() #檢查是否只由數字組成 s.lower() #轉爲小寫 s.endswith('spam') #是否以制定後綴結尾 'spam'.join(strlist) #插入分割符 s.encode('latin-1') #unicode編碼 for x in s: print(x) #迭代,成員關係 'spam' in s [c * 2 for c in s] map(ord, s)
字符串常量git
單雙引號字符串是同樣的,並且python會自動在任意表達式中合併相鄰的字符串常量。數據庫
title = "Meaning " 'of' " Life" #'Meaning of Life'
用轉義序列表明特殊字節工具
\newline #忽視(連續) \\ #反斜槓 \' #單引號 \" #雙引號 \a #響鈴 \b #倒退 \f #換頁 \n #換行 \r #返回 \t #水平製表符 \v #垂直製表符 \N #unicode數據庫ID \uhhhh #unicode 16位的十六進制值 \Uhhhhhhhh #unicode 32位的十六進制值 \xhh #十六進制值 \0xx #八進制值 \0 #Null \other #不轉義
一些轉義字符容許一個字符串中嵌入絕對的二進制值。編碼
s = 'a\0b\0c' s #'a\x00b\x00c' len(s) #5
注意,python以十六進制現實非打印的字符。spa
若是python找不到合法的轉義編碼,就會保留反斜槓。code
raw字符串抑制轉義orm
若是使用如下參數去打開文件就會出錯:對象
myfile = open('C:\new\text.dat', 'w')
\n會被識別爲一個換行字符,\t會被識別爲一個製表符。若是在字符串第一個引號前面放一個字母r(大寫或小寫),它就會關閉轉義機制。blog
myfile = open(r'C:\new\text.dat', 'w')
還有一種辦法,用兩個反斜槓來表明一個反斜槓。
myfile = open('C:\\new\\text.dat', 'w')
三重引號編寫多行字符串塊
若是但願一些行的代碼不工做,以後再運行,能夠簡單在這幾行先後加入三重引號。
x = 1 """ import os print(os.getcwd()) """ y = 2
實際應用中的字符串
基本操做
字符串能夠用+來合併,*來重複。
'abc' + 'def' #'abcdef' 'NI!' * 5 #'NI!NI!NI!NI!NI!'
能夠用for語句在字符串中循環迭代,in操做符能夠對字符串進行搜索。
my = 'dsfdgdfg' for c in my: print(c, end = ' ') #d s f d g d f g 'd' in my #True 'f' in my #True
索引和分片
python能夠經過索引來獲取字符串中的字符,python的偏移量從0開始,而且還支持負偏移量,一個負偏移加上字符串的長度就等於正偏移,能夠把負偏移看作從結束處反向計數。
s = 'spam' s[0], s[-2] #('s', 'a') s[1:3], s[1:], s[:-1] #('pa', 'pam', 'spa')
當使用分片時,左邊的偏移做爲下邊界(下邊界包含在內),右邊的偏移做爲上邊界(不包含上邊界在內)。python將獲取從下邊界開始直到不包含上邊界的全部元素。若是省略,上下邊界默認分別是0和對象的長度。
索引s[i]獲取特定偏移的元素:
分片s[i:j]提取對應部分做爲一個序列:
s[i:j]實現了一個徹底的頂層的序列對象的拷貝,一個有相同值,可是不一樣內存片區的對象。但對於字符串這樣不可變對象並非頗有用,但對於能夠原地修改的對象卻很實用,例如列表。
擴展分片:第三個限制值
分片的第三個索引,是步進。完整的分片爲x[i:j:k],這表示「索引x對象中的元素,從偏移爲i知道偏移爲j-1,沒隔k個元素索引一次」。k默認是1,若是定義了一個值,就會跳過某些元素或者反向排列順序。
s = 'abcdefghijklmnop' s[1:10:2] #'bdfhj' s[::2] #'acegikmo'
若是使用負數做爲步進,步進-1表示從右往左,實際效果就是將序列反向。
s = 'hello' s[::-1] 'olleh'
字符串轉換工具
int('42'), str(42) #(42, '42') repr(42) #'42'
int()將字符串轉換成數字,而str()將數字轉換成字符串。repr()也能夠轉換對象爲字符串。
repr()與str()的區別是,repr()返回的對象能夠做爲代碼字符串,能夠從新建立對象,也就是說obj = eval(repr(obj))是成立的。
字符串代碼轉換
單個字符能夠傳給ord()轉換爲對應的ASCII碼。
ord('s') #115 chr(115) #'s'
下面的程序能夠轉換二進制數爲十進制數:
b = '1101' i = 0 while b != '': i = i * 2 + (ord(b[0]) - ord('0')) b =b[1:] i #13
修改字符串
字符串是不可變序列,因此想要原地修改字符串會報錯,所以須要利用合併,分片這樣的工具來處理而後賦值給一個新的字符串。也能夠使用字符串格式化。
注意:
python3.0和2.6中引入了一種新字符串類型bytearray,它能夠修改。bytearray並非真正的字符串,它是較小的,8位整數序列。
字符串方法