所有標(biāo)準(zhǔn)的序列操作對(duì)字符串都適用,但字符串是不可變的
字符串常量:
單引號(hào):‘spa"m'
雙引號(hào):"spa'm"
三引號(hào):'''...spam...''',"""...spam..."""
轉(zhuǎn)義字符:"s\tp\na\om"
Raw字符串:r"C:\new\test.spm"
Unicode字符串:u'eggs\u0020spam
單雙引號(hào)是一樣的
單雙引號(hào)可以互換,字符常量表達(dá)式可以用兩個(gè)單引號(hào)或兩個(gè)雙引號(hào)來(lái)表示--兩種形式同樣有效返回相同類型的對(duì)象:
>>> 'zxcvbn',"zxcvbn"
('zxcvbn', 'zxcvbn')
>>> #不適用轉(zhuǎn)義字符就可以實(shí)現(xiàn)在一個(gè)字符串中包含其余種類 的引號(hào)
>>> 'knight"s',"knight's"
('knight"s', "knight's")
可以自動(dòng)在任意的表達(dá)式中合并相鄰的字符串常量,盡管也可以使用+操作符實(shí)現(xiàn):
>>> title="sdfsd"'dfg'"fgfd"
>>> title
'sdfsddfgfgfd'
字符串的格式化使用字符%來(lái)實(shí)現(xiàn):
在%的左側(cè)放置一個(gè)字符串,右側(cè)放置希望格式化的值,可以使用一個(gè)值,也可以使用多個(gè)值的元組或字典
>>> format="Hello. %s. %s enough for ya?"
>>> values=('world','Hot')
>>> print format % values
Hello. world. Hot enough for ya?
如果需要轉(zhuǎn)換的元組作為轉(zhuǎn)換表達(dá)式的一部分存在,那么必須將它用圓括號(hào)括起來(lái),以免出錯(cuò)
長(zhǎng)字符串、原始字符串
1、長(zhǎng)字符串
如果需要寫(xiě)一個(gè)非常長(zhǎng)的字符串,需要跨多行,則可以使用三個(gè)引號(hào)代替普通引號(hào)
>>> print '''this is
a
very long
string'''
this is
a
very long
string
如果一行之中最后一個(gè)字符是反斜線,那么換行符本身就“轉(zhuǎn)義”了,也就是被忽略了
>>> print "hello.\
world!"
hello.world!
>>> #這個(gè)用法也適用表達(dá)式和語(yǔ)句
>>> 1+2+\
????? 4+5
12
>>> print \
????? 'hello.world'
hello.world
2、原始字符串
原始字符串以r開(kāi)頭,可以在原始字符串中放入任何字符,最后輸出的字符串包含了轉(zhuǎn)義所用的反斜線,但是不能在字符串結(jié)尾輸入反斜線:
>>> print \
????? 'hello.world'
hello.world
>>> print r'Let\'s go!'
Let\'s go!
>>> print r'this is illegal\'
SyntaxError: EOL while scanning string literal
索引與分片
字符串的字符是通過(guò)索引來(lái)提取的,將獲得在特定位置的一個(gè)字符的字符串。
Python偏移量是從0開(kāi)始的,并比字符串的長(zhǎng)度小1,還支持類似在字符串中使用負(fù)偏移這樣的方法從序列中獲取元素,負(fù)偏移認(rèn)作是從結(jié)束處反向計(jì)數(shù)
當(dāng)使用一對(duì)冒號(hào)分隔的偏移索引字符串這樣的序列對(duì)象時(shí),將獲取從下邊界直到但不包括上邊界的所有元素
索引(s[i])獲取特定偏移的元素:
第一個(gè)元素的偏移為0
負(fù)偏移索引意味著從最后或右邊反向進(jìn)行計(jì)數(shù)
s[0]獲取第一個(gè)元素
s[-2]獲取了倒數(shù)第二個(gè)元素
分片(s[i:j])提取對(duì)應(yīng)的部分作為一個(gè)序列:
上邊界并不包含在內(nèi)
分片的邊界默認(rèn)為0和序列的長(zhǎng)度,如果沒(méi)有給出的話
s[1:3]獲取從偏移為1的元素,直到但不包括偏移為3的元素
s[1:]獲取了從偏移為1直到末尾之間的元素
s[:3]獲取了從偏移為0直到但是不包括偏移為3之間的元素
s[:-1]獲取了從偏移為0直到但是不包括最后一個(gè)元素之間的元素
s[:]獲取了從偏移0到末尾之間的元素
>>> s='spam'
>>> s[0],s[-2]
('s', 'a')
>>> s[1:3],s[1:],s[:-1]
('pa', 'pam', 'spa')
>>> s[0],s[-2]
('s', 'a')
擴(kuò)展分片:第三個(gè)限制值
分片表達(dá)式增加了一個(gè)可選的第三個(gè)索引,用作步進(jìn)X[I:J:K]表示:索引X對(duì)象中的元素,從偏移為I直到偏移為J-1,每隔K元素索引一次
>>> s='abcdefghijklmnop'
>>> s[1:10:2]
'bdfhj'
>>> s[::2]
'acegikmo'
>>> s='hello'
>>> s[::-1]
'olleh'
>>> s[4:1:-1]
'oll'
字符串轉(zhuǎn)換工具
>>> '42'+1
Traceback (most recent call last):
? File "
??? '42'+1
TypeError: cannot concatenate 'str' and 'int' objects
>>> int('42'),str(42)
(42, '42')
>>> repr(42),'42'
('42', '42')
>>> s='42'
>>> i=1
>>> s+i
Traceback (most recent call last):
? File "
??? s+i
TypeError: cannot concatenate 'str' and 'int' objects
>>> int(s)+i
43
>>> s+str(i)
'421'
>>> #類似也可以把浮點(diǎn)數(shù)轉(zhuǎn)換成字符串或把字符串轉(zhuǎn)換成浮點(diǎn)數(shù)
>>> str(3.1415),float("1.3")
('3.1415', 1.3)
>>> text='1.23E-10'
>>> float(text)
1.23e-10
字符串代碼轉(zhuǎn)換
單個(gè)字符也可以通過(guò)將其傳給內(nèi)置的ord函數(shù)轉(zhuǎn)換為其對(duì)應(yīng)的ASCII碼,chr函數(shù)則執(zhí)行相反的操作:
>>> ord('s')
115
>>> chr(115)
's'
字符串方法
字符串比列表的方法還要豐富很多,因?yàn)樽址畯膕tring模塊中“繼承”了很多方法,本篇文章只介紹一些特別有用的字符串方法
?1、find
find方法可以在一個(gè)較長(zhǎng)的字符串中查找一個(gè)子字符串,它返回子串所在位置的最左端索引,如果沒(méi)有找到則返回-1
>>> 'with a moo-moo here, and a moo-moo there'.find('moo')
7
>>> title="Monty Python's Flying Cirus"
>>> title.find('Monty')
0
>>> title.find('Python')
6
>>> title.find('Zirquss')
-1
這個(gè)方法可以接受可選的起始點(diǎn)和結(jié)束點(diǎn)參數(shù):
>>> subject='$$$ Get rich now!!! $$$'
>>> subject.find('$$$')
0
>>> subject.find('$$$',1)
20
>>> subject.find('!!!')
16
>>> subject.find('!!!',0,16)
-1
2、join
join方法是非常重要的字符串方法,它是split方法的逆方法,用來(lái)在隊(duì)列中添加元素:
>>> seq=[1,2,3,4,5]
>>> sep='+'
>>> sep.join(seq)
Traceback (most recent call last):
? File "
??? sep.join(seq)
TypeError: sequence item 0: expected string, int found
>>> seq=['1','2','3','4','5']
>>> sep.join(seq)
'1+2+3+4+5'
>>> dirs='','usr','bin','env'
>>> '/'.join(dirs)
'/usr/bin/env'
>>> print 'C:'+'\\'.join(dirs)
C:\usr\bin\env
3、lower
lower方法返回字符串的小寫(xiě)字母版
>>> 'HDWUD HDJHS LKJDS'.lower()
'hdwud hdjhs lkjds'
4、replace
replace方法返回某字符串的所有匹配項(xiàng)均被替換后得到字符串
>>> 'This is a test'.replace('is','eez')
'Theez eez a test'
5、split
它是join的逆方法,用來(lái)將字符串分割成序列
>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']
>>> 'C:\usr\bin\env'.split('/')
['C:\\usr\x08in\\env']
>>> 'Using the default'.split()
['Using', 'the', 'default']
注意:如果不提供任何分隔符,程序會(huì)把所有的空格作為分隔符
6、strip
strip方法返回去除兩側(cè)(不包含內(nèi)部)空格的字符串:
>>> '???? internal whitespace is kept???? '.strip()
'internal whitespace is kept'
也可指定需要去除的字符,將它們列為參數(shù)即可:
>>> '*** SPAM * for * everyone!!! ***'.strip(' *!')
'SPAM * for * everyone'
注意:只會(huì)去除兩側(cè)的字符
7、translate
translate方法和replace方法一樣,可以替換字符串中的某些部分,但是和前者不同的是,translate方法只處理單個(gè)字符
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
