Python字符串的字符轉(zhuǎn)換、字符串劈分、字符串合并問(wèn)題分析
1.字符串的字符轉(zhuǎn)換
1.1.字符轉(zhuǎn)換的概念
在前面說(shuō)的的字符串替換,是將字符串中的一個(gè)子串替換成了新的子串,如果我們想對(duì)字符串中的某些字符進(jìn)行轉(zhuǎn)換,也就是對(duì)字符串中的單個(gè)字符進(jìn)行替換,可以調(diào)用方法maketrans和translate來(lái)實(shí)現(xiàn)。
首先調(diào)用maketrans方法創(chuàng)建一個(gè)轉(zhuǎn)換表,在轉(zhuǎn)換表中聲明要將那些字符轉(zhuǎn)換成什么字符,然后將創(chuàng)建的轉(zhuǎn)換表作為參數(shù)傳給translate方法,實(shí)現(xiàn)字符的轉(zhuǎn)換。
maketrans方法創(chuàng)建轉(zhuǎn)換表的語(yǔ)法:
str.maketrans('轉(zhuǎn)換的字符', '轉(zhuǎn)換后的字符','刪除的字符')
maketrans方法可以傳入三個(gè)參數(shù):
- 第一個(gè)參數(shù)用于指定被轉(zhuǎn)換的字符,如果指定了多個(gè)字符,那么轉(zhuǎn)換后的字符也需要指定多個(gè),且數(shù)量都要相同,被轉(zhuǎn)換的第一個(gè)字符會(huì)轉(zhuǎn)換成第二個(gè)參數(shù)中的第一個(gè)字符,案例中會(huì)說(shuō)明。
- 第二個(gè)參數(shù)用于指定轉(zhuǎn)換后的字符。
- 第三個(gè)參數(shù)用于指定刪除那些字符。
定義好一個(gè)轉(zhuǎn)換表之后,使用print可以打印這個(gè)轉(zhuǎn)換表的內(nèi)容,此時(shí)返回的是一個(gè)字典,字典中的每個(gè)key:value都是字符對(duì)應(yīng)的ordinal value值。
translate方法將轉(zhuǎn)換表當(dāng)做參數(shù)傳入,再被定義的字符串調(diào)用,最終實(shí)現(xiàn)字符的轉(zhuǎn)換。
1.2.字符轉(zhuǎn)換的應(yīng)用案例
1)轉(zhuǎn)換表的創(chuàng)建
定義轉(zhuǎn)換表時(shí),如果指定了多個(gè)被轉(zhuǎn)換的字符,那么轉(zhuǎn)換后的字符數(shù)量要與被轉(zhuǎn)換的字符數(shù)量相同,此時(shí)第一個(gè)參數(shù)和第二個(gè)參數(shù)會(huì)交叉轉(zhuǎn)換,代碼如下。
contable = str.maketrans('agx', '789') print(contable) ''' 代碼解釋: str.maketrans('agx', '789')定義了一個(gè)轉(zhuǎn)換表,其中字符a轉(zhuǎn)換成字符7,字符g轉(zhuǎn)換成字符8,字符x轉(zhuǎn)換成字符9 當(dāng)使用print函數(shù)打印定義的轉(zhuǎn)換表時(shí),返回的是一個(gè)字典,key是被轉(zhuǎn)換的字符,value是轉(zhuǎn)換后的字符,并且返回的是字符的ordinal value值 返回結(jié)果:{97: 55, 103: 56, 120: 57} {97是字符a: 55是字符7, 103是字符g: 56是字符8, 120是字符x: 57是字符9} '''
可以使用print函數(shù)打印轉(zhuǎn)換表,返回結(jié)果是一個(gè)字典,在字典中的值是對(duì)應(yīng)字符的ordinal value值,在字典中可以明確的看到什么字符會(huì)被轉(zhuǎn)換成什么字符,如下圖,97是字符a,55是字符7,97對(duì)應(yīng)的字符會(huì)轉(zhuǎn)換成55對(duì)應(yīng)的字符。
除了直接以字符串的形式聲明被轉(zhuǎn)換字符和轉(zhuǎn)換后字符的原始值外,還可以使用字典的方法聲明轉(zhuǎn)換與被轉(zhuǎn)換的字符,因?yàn)檗D(zhuǎn)換表返回的結(jié)果就是一個(gè)字典,但是用的最普遍的方法還是直接在轉(zhuǎn)換表中聲明被轉(zhuǎn)換的字符。
#使用字典的形式,在字典中聲明轉(zhuǎn)換的字符、被轉(zhuǎn)換字符的原始值 contable = str.maketrans({'a': '7', 'g': '8', 'x': '9'}) print(contable) ''' 此時(shí)使用print打印轉(zhuǎn)換表時(shí),就會(huì)發(fā)現(xiàn)轉(zhuǎn)換后的字符會(huì)以原始值的形式記錄在字典中,被轉(zhuǎn)換的字符還是以ordinal value值表示 ''' #輸出結(jié)果:{97: '7', 103: '8', 120: '9'} #還是使用字典的行駛,在字典中聲明被轉(zhuǎn)換字符、轉(zhuǎn)換字符的ordinal value值 contable = str.maketrans({97: 55, 103: 56, 120: 57}) print(contable) ''' 這種方法需要實(shí)現(xiàn)使用ord函數(shù)獲取被轉(zhuǎn)換字符、轉(zhuǎn)換字符的ordinal value值,然后在字典中直接聲明字符的ordinal value值 ''' #輸出結(jié)果:{97: 55, 103: 56, 120: 57}
2)字符的轉(zhuǎn)換
#首先定義一個(gè)轉(zhuǎn)換表,這個(gè)轉(zhuǎn)換表可以被任意字符串調(diào)用使用 contable = str.maketrans('agx', '789') #定義一個(gè)字符串 mystr = 'jiangxluplader' #使用translate方法將轉(zhuǎn)換表以參數(shù)的形式傳入,然后由字符串調(diào)用這個(gè)方法實(shí)現(xiàn)字符的轉(zhuǎn)換 print(mystr.translate(contable)) #輸出結(jié)果:ji7n89lupl7der
發(fā)現(xiàn)字符串中所有的a字符都被轉(zhuǎn)換成了7,所有的g字符都被轉(zhuǎn)換成了8,所有的x字符都被轉(zhuǎn)換成了9。
3)maketrans方法定義轉(zhuǎn)換表時(shí) 還可以指定要?jiǎng)h除的字符,例如刪除字符u、p
contable = str.maketrans('agx', '789', 'up') mystr = 'jiangxluplader' print(mystr.translate(contable)) ''' maketrans方法創(chuàng)建轉(zhuǎn)換表時(shí),第三個(gè)參數(shù)是指定刪除的字符 ''' #輸出結(jié)果:ji7n89ll7der
4)maketrans方法定義轉(zhuǎn)換表中,還可以不對(duì)字符進(jìn)行轉(zhuǎn)換,只對(duì)某些字符進(jìn)行刪除,例如只刪除字符u、p
contable = str.maketrans('', '', 'up') mystr = 'jiangxluplader' print(mystr.translate(contable)) #輸出結(jié)果:jiangxllader
當(dāng)指定第三個(gè)參數(shù)時(shí),會(huì)將指定的字符刪除,其實(shí)就是將指定的字符設(shè)置成了None對(duì)象。
2.字符串的劈分
2.1.字符串劈分的概念
所謂的字符串劈分指的是,根據(jù)指定的分隔符,將字符串一分為N個(gè),例如字符串“aaa bbb”,默認(rèn)的分隔符是空格,根據(jù)分隔符可以將這個(gè)字符串分為“aaa”,“bbb”,這就是字符串的劈分。字符串的劈分共有兩種方法:
1)調(diào)用方法split或者rsplit劈分字符串
- split方法是從字符串的左側(cè)開(kāi)始劈分字符串,從前往后開(kāi)始劈分。
- rsplit方法是從字符串的右側(cè)開(kāi)始劈分字符串,從后往前開(kāi)始劈分。
split和rsplit方法會(huì)根據(jù)分隔符對(duì)字符串中所有出現(xiàn)分隔符的地方進(jìn)行劈分。
默認(rèn)的分隔符是空格字符串,這兩個(gè)方法如果不指定最大的劈分次數(shù),輸出的內(nèi)容沒(méi)有任何區(qū)別,并且這兩個(gè)方法的返回值都是一個(gè)列表。
當(dāng)字符串中沒(méi)有指定的分隔符時(shí),這兩個(gè)方法都會(huì)返回字符串本身,但是也會(huì)將字符串本身放在列表中。
2)調(diào)用方法partition或者rpartition劈分字符串
partition和rpartition這兩個(gè)方法在調(diào)用的時(shí)候必須指定分隔符,然后對(duì)字符串進(jìn)行劈分,這兩個(gè)方法對(duì)字符串劈分后會(huì)返回一個(gè)元組。
- partition方法是左劈分,從左往右找到分隔符第一次出現(xiàn)的位置,然后開(kāi)始劈分字符串,始終劈分成三個(gè)元素,第一個(gè)元素是分隔符左側(cè)的部分,第二個(gè)元素是分隔符,第三個(gè)元素是分隔符后面的部分。
- rpartition方法是右劈分,從右往左找到分隔符第一次出現(xiàn)的位置,或者從左往右找到分隔符最后一次出現(xiàn)的位置,然后開(kāi)始劈分字符串,始終劈分成三個(gè)元素,第一個(gè)元素是分隔符左側(cè)的部分,第二個(gè)元素是分隔符,第三個(gè)元素是分隔符后面的部分。
partition方法和rpartition只會(huì)將字符串中第一次出現(xiàn)分隔符的位置,進(jìn)行劈分,一分為三,這就是與split方法的最大區(qū)別
partition方法和rpartition兩個(gè)方法只是開(kāi)始劈分的位置處不同,然后將字符串劈分為三個(gè)元素:
- 分隔符前面的部分
- 分隔符
- 分隔符后面的部分
如果字符串中不存在指定的分隔符,兩個(gè)方法都會(huì)返回字符串本身,partition方法劈分的三個(gè)元素順序依次為:字符串本身、空字符串、空字符串,rpartition方法劈分的三個(gè)元素依次為:空字符串、空字符串、字符串本身。
2.2.調(diào)用方法split或者rsplit劈分字符串
1)基本的劈分案例
#原始字符串 mystr = "DevOps Jenkins Kubernetes" #左劈分 print(mystr.split()) #右劈分 print(mystr.rsplit()) ''' 左劈分是從DevOps第一個(gè)空格字符串處開(kāi)始劈分,右劈分是從Kubernetes最后一個(gè)空格字符串處開(kāi)始劈分 默認(rèn)的劈分字符串是空格字符串,只要遇到空格字符串,就將空格字符串左側(cè)的字符串劈分出來(lái)。 '''
可以看到split和rsplit兩個(gè)方法對(duì)字符串劈分后,并沒(méi)有明顯的區(qū)別。
2)通過(guò)參數(shù)sep指定分隔符劈分字符串
在split和rsplit方法中都可以使用sep參數(shù)指定分隔符,從而根據(jù)指定的分隔符去劈分字符串。
mystr = "DevOps|Jenkins|Kubernetes" print(mystr.split(sep='|')) print(mystr.rsplit(sep='|')) ''' split(sep='|')、rsplit(sep='|')指定分隔符為“|” '''
可以看到split和rsplit兩個(gè)方法對(duì)字符串劈分后,并沒(méi)有明顯的區(qū)別。
當(dāng)指定的分隔符字符串不存在時(shí),則會(huì)返回字符串本身,但是也會(huì)將字符串本身放在列表中。
mystr = "DevOps Jenkins Kubernetes" print(mystr.split(sep='|')) print(mystr.rsplit(sep='|'))
3)通過(guò)參數(shù)maxsplit指定劈分字符串的最大劈分次數(shù)
在split和rsplit方法中都可以使用maxsplit參數(shù)指定劈分字符串的最大劈分次數(shù),什么意思呢?原本一個(gè)字符串可以被劈分6次,但是我們只需要劈分2次就行,就可以使用maxsplit參數(shù)指定指定劈分字符串的最大劈分次數(shù)。
當(dāng)指定了最大的劈分次數(shù)時(shí),當(dāng)超過(guò)最大的劈分次數(shù)后,剩余的子串會(huì)單獨(dú)作為一部分輸出,此時(shí)split和rsplit兩個(gè)劈分方法就會(huì)有明顯的區(qū)別。
#定義原始字符串 mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab" ''' 使用split方法是從左往右開(kāi)始劈分,從第一個(gè)子串位置處開(kāi)始劈分,分隔符為"|",劈分次數(shù)為2,本身這個(gè)字符串可以被劈分5次,我們只劈分2次,那么DevOps、Jenkins會(huì)被劈分出來(lái)作為列表的單獨(dú)元素,而剩余的子串Kubernetes|Python|Gitlab會(huì)被作為一部分放在列表的一個(gè)元素內(nèi) ''' print(mystr.split(sep='|', maxsplit=2)) #輸出結(jié)果:['DevOps', 'Jenkins', 'Kubernetes|Python|Gitlab'] ''' 使用rsplit方法是從右往左開(kāi)始劈分,從最后一個(gè)子串處開(kāi)始劈分,分隔符為"|",劈分次數(shù)為2,本身這個(gè)字符串可以被劈分5次,我們只劈分2次,那么Gitlab、Python這兩個(gè)字符串會(huì)被劈分出來(lái)作為列表的單獨(dú)元素,而剩余的字符DevOps|Jenkins|Kubernetes會(huì)被作為一部分,放在列表的一個(gè)元素內(nèi) ''' print(mystr.rsplit(sep='|', maxsplit=2)) #輸出結(jié)果:['DevOps|Jenkins|Kubernetes', 'Python', 'Gitlab']
當(dāng)在劈分方法內(nèi)指定了最大的劈分次數(shù)的參數(shù)時(shí),split左劈分和rsplit右劈分就會(huì)有明顯的區(qū)別,split方法是從前往后根據(jù)分隔符進(jìn)行劈分,rsplit方法是從后往前根據(jù)分隔符進(jìn)行劈分。
2.3.調(diào)用方法partition或者rpartition劈分字符串
partition方法是左劈分,從左往右找到分隔符第一次出現(xiàn)的位置,然后開(kāi)始劈分字符串,始終劈分成三個(gè)元素,第一個(gè)元素是分隔符左側(cè)的部分,第二個(gè)元素是分隔符,第三個(gè)元素是分隔符后面的部分。
rpartition方法是右劈分,從右往左找到分隔符第一次出現(xiàn)的位置,或者從左往右找到分隔符最后一次出現(xiàn)的位置,然后開(kāi)始劈分字符串,始終劈分成三個(gè)元素,第一個(gè)元素是分隔符左側(cè)的部分,第二個(gè)元素是分隔符,第三個(gè)元素是分隔符后面的部分。
這兩個(gè)方法,只會(huì)根據(jù)一個(gè)分隔符進(jìn)行劈分字符串,且始終劈分成三個(gè)元素,partition方法的分隔符取決于在字符串中第一次出現(xiàn)的分隔符,rpartition方法的分隔符取決于字符串中最后一次出現(xiàn)的分隔符。
1)調(diào)用方法partition劈分字符串
mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab" print(mystr.partition('|')) ''' partition從左往右找到第一次出現(xiàn)分隔字符串的位置,從這里開(kāi)始劈分字符串,分隔符左側(cè)的部分(DevOps)為第一個(gè)元素,分隔符(|)為第二個(gè)元素,分隔符右側(cè)的部分(Jenkins|Kubernetes|Python|Gitlab)為第三個(gè)元素。 ''' #輸出結(jié)果:('DevOps', '|', 'Jenkins|Kubernetes|Python|Gitlab')
2)調(diào)用方法rpartition劈分字符串
mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab" print(mystr.rpartition('|')) ''' rpartition從左往右找到最后一次出現(xiàn)分隔字符串的位置,分隔符左側(cè)的部分(DevOps)為第一個(gè)元素,分隔符(|)為第二個(gè)元素,分隔符右側(cè)的部分(Jenkins|Kubernetes|Python|Gitlab)為第三個(gè)元素。 ''' #輸出結(jié)果:('DevOps|Jenkins|Kubernetes|Python', '|', 'Gitlab')
確實(shí)和理論說(shuō)明的一樣,從左往右找到最后一次分隔符出現(xiàn)的位置,分隔符左側(cè)的部分為元組中的第一個(gè)元素,分隔符為第二個(gè)元素,分隔符右側(cè)的部分為元組中的第三個(gè)元素。
3)當(dāng)字符串中只有一個(gè)分隔符字符串且分隔符后沒(méi)有任何字符時(shí)
當(dāng)字符串中只有一個(gè)分隔符字符串時(shí),且分隔符后面沒(méi)有任何字符串,此時(shí)無(wú)論是partition方法還是rpartition方法,劈分的字符串第三個(gè)元素一定為空。
mystr = "DevOps|" print(mystr.partition('|')) print(mystr.rpartition('|'))
第三個(gè)元素取的都是分隔符后面的部分,分隔符后面的部分什么也沒(méi)有,因此就會(huì)輸出空字符串。
4)當(dāng)字符串中不存在指定的分隔符字符串(partition方法)
如果字符串中不存在指定的分隔符,partition方法劈分的三個(gè)元素順序依次為:字符串本身、空字符串、空字符串。
mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab" print(mystr.partition('*')) #輸出結(jié)果:('DevOps|Jenkins|Kubernetes|Python|Gitlab', '', '')
第一個(gè)元素是字符串的本身,第二個(gè)元素是空字符串,第三個(gè)元素也是空字符串。
4)當(dāng)字符串中不存在指定的分隔符字符串(rpartition方法)
如果字符串中不存在指定的分隔符,rpartition方法劈分的三個(gè)元素順序依次為:空字符串、空字符串、字符串本身。
mystr = "DevOps|Jenkins|Kubernetes|Python|Gitlab" print(mystr.rpartition('*'))
第一個(gè)元素是空字符串,第二個(gè)元素是空字符串,第三個(gè)元素是字符串的本身。
3.字符串的合并
可以調(diào)用方法join將多個(gè)字符串合并成一個(gè)字符串。語(yǔ)法格式如下:
'字符串的間隔符'.join(列表|數(shù)組) 字符串的間隔符可以指定,也可以不指定,指定后,每個(gè)元素字符串在合并時(shí)都會(huì)在后面添加一個(gè)分隔符。
1)使用join方法將列表中多個(gè)字符串進(jìn)行合并
使用join方法可以將列表中的多個(gè)元素,元素也都是字符串,將這些字符串進(jìn)行合并。
print(''.join(["Python", "Go", "K8S"])) #輸出結(jié)果:PythonGoK8S
使用join方法將列表中的每個(gè)元素合并時(shí)添加一個(gè)分隔符“|”
print('|'.join(["Python", "Go", "K8S"])) #輸出結(jié)果:Python|Go|K8S
2)使用join方法將元組中的多個(gè)字符串進(jìn)行合并
join方法也可以將元組中的元素合并。
print('|'.join(("Python", "Go", "K8S"))) #輸出結(jié)果:Python|Go|K8S
3)可以把字符串看成是字符的列表,然后使用join方法將這些字符合并成字符串
可以把字符串看成是字符的列表,然后使用join將這些字符加上分隔符合并成新的字符串。
print('|'.join("Python")) #輸出結(jié)果:P|y|t|h|o|n
到此這篇關(guān)于Python字符串的字符轉(zhuǎn)換、字符串劈分、字符串合并的文章就介紹到這了,更多相關(guān)Python字符串合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用grappelli為django admin后臺(tái)添加模板
本文介紹了一款非常流行的Django模板系統(tǒng)--grappelli,以及如何給Django的admin后臺(tái)添加模板,非常的實(shí)用,這里推薦給大家。2014-11-11Pytorch使用MNIST數(shù)據(jù)集實(shí)現(xiàn)基礎(chǔ)GAN和DCGAN詳解
今天小編就為大家分享一篇Pytorch使用MNIST數(shù)據(jù)集實(shí)現(xiàn)基礎(chǔ)GAN和DCGAN詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01Python+LyScript實(shí)現(xiàn)自定義反匯編
LyScript?插件默認(rèn)提供了一個(gè)get_disasm_code()方法可以直接獲取到指定行數(shù)的反匯編代碼。本文將利用LyScript實(shí)現(xiàn)自定義反匯編,感興趣的可以了解一下2022-07-07Django部署到服務(wù)器后無(wú)法獲取到靜態(tài)元素 The requested resource
寫(xiě)了一個(gè)Django項(xiàng)目,部署到云主機(jī)后,訪問(wèn)發(fā)現(xiàn)圖片無(wú)法訪問(wèn),報(bào)錯(cuò)The requested resource was not found on this server,下面給大家介紹Django部署到服務(wù)器后無(wú)法獲取到靜態(tài)元素The requested resource was not found on this server(問(wèn)題及解決方案),需要的朋友可以參考下2024-02-02python通過(guò)郵件服務(wù)器端口發(fā)送郵件的方法
這篇文章主要介紹了python通過(guò)郵件服務(wù)器端口發(fā)送郵件的方法,涉及Python發(fā)送郵件的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04