Python字符串處理實例詳解
Python字符串處理實例詳解
一、拆分含有多種分隔符的字符串
1.如何拆分含有多種分隔符的字符串
問題: 我們要把某個字符串依據(jù)分隔符號拆分不同的字段,該字符串包含多種不同的分隔符,例如:
s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz"
其中;,|,\t 都是分隔符號,如何處理?
方法一: 連續(xù)使用str.split()方法,每次處理一種分隔符號
s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz" def mySplit(s,ds): res = [s] for d in ds: t = [] map(lambda x: t.extend(x.split(d)), res) res = t return res print mySplit(s,';|,\t') 輸出: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']
方法二: 使用正則表達式的re.split()方法,一次性拆分字符串
import re s = "ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz" print re.split(r'[;|,\t]+',s) 輸出: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']
二、調(diào)整字符串中文本格式
1. 如何判斷字符串a(chǎn)是否以字符串b開頭或結(jié)尾
問題:某文件系統(tǒng)目錄下有一系列文件:a.py,quicksort.c,stack.cpp,b.sh , 編寫程序給其中所有.sh文件和.py文件加上用戶可執(zhí)行權(quán)限?
解決方案: 使用字符串中的str.startswith()和end.startswith()方法 (注意:多個匹配時參數(shù)使用元組)
In [1]: import os # 列出當(dāng)前目錄以.sh和以.py結(jié)尾的文件 In [2]: [name for name in os.listdir('.') if name.endswith(('.py','.sh'))] Out[2]: ['b.sh', 'a.py'] In [3]: import stat # 查看 a.py 文件權(quán)限 In [4]: os.stat('a.py').st_mode Out[4]: 33204 # 把文件權(quán)限轉(zhuǎn)換成8進制,即為平常看到的權(quán)限 In [5]: oct(os.stat('a.py').st_mode) Out[5]: '0100664' # 更改文件權(quán)限,添加一個可執(zhí)行權(quán)限 In [6]: os.chmod('a.py',os.stat('a.py').st_mode | stat.S_IXUSR) In [7]: ll total 0 -rwxrw-r-- 1 yangyang 0 5月 9 14:48 a.py* -rw-rw-r-- 1 yangyang 0 5月 9 14:48 b.sh -rw-rw-r-- 1 yangyang 0 5月 9 14:48 quicksort.c -rw-rw-r-- 1 yangyang 0 5月 9 14:48 stack.cpp
2.如何對字符串中文本的格式進行調(diào)整
問題: 某軟件的log文件,其中日期格式為“yyyy-mm-dd”:
2017-05-08 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2 2017-05-08 09:12:48 startup packages configure 09:12:48 startup packages configure
我們想把其中日期改為美國日期的格式"mm/dd/yyyy",2017-05-08 ==> 05/08/2017 ,應(yīng)如何處理?
解決方案:使用正則表達式re.sub()方法做字符串替換,利用正則表達式的捕獲組捕獲每個部分內(nèi)容,在字符串中調(diào)整各個組的捕獲順序。
In [1]: import re In [2]: log = open('/var/log/dpkg.log').read() # (\d{4}) 匹配到4個數(shù)字為一個捕獲組,其順序為1。故后面替換用\1放到最后,r是為了防止字符串被轉(zhuǎn)義 In [3]: print re.sub('(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1', log) 05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 startup packages configure # 也可以為每個捕獲組起個名稱,而不使用默認順序來處理 In [5]: print re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})',r'\g<month>/\g<day>/\g<year>', log) 05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.2 05/08/2017 09:12:48 startup packages configure
三、字符串拼接
1.如何將多個小字符串拼接成一個大的字符串
問題:在程序中我們將各個參數(shù)按次序收集到列表中: ["<0112>", "<32>","<1024x768>","<60>" ],要把各個參數(shù)拼接成數(shù)據(jù)報進行發(fā)送"<0112><32><1024x768><60>"
解決方案:
方法一:迭代列表,連續(xù)使用“+”操作依次拼接每一個字符串
In [1]: pl = ["<0112>", "<32>","<1024x768>","<60>" ] In [2]: s = '' # 這種方法會產(chǎn)生許多臨時結(jié)果,會造成資源的浪費 In [3]: for p in pl: ...: s = s + p ...: print s ...: <0112> <0112><32> <0112><32><1024x768> <0112><32><1024x768><60> In [4]: s Out[4]: '<0112><32><1024x768><60>'
方法二:使用str.join()方法,更加快速的拼接列表中所有字符串
In [5]: ''.join(pl) Out[5]: '<0112><32><1024x768><60>'
有個列表l = ['abc',123,45,'xyz'],如何讓123和45以字符串的方式拼接
In [6]: l = ['abc',123,45,'xyz'] # 使用生成器表達式,開銷比列表表達式小 In [7]: (str(x) for x in l) ...: Out[7]: <generator object <genexpr> at 0x7fe3cadef550> In [8]: ''.join(str(x) for x in l) Out[8]: 'abc12345xyz'
四、字符串居中對齊
1.如何對字符串進行左、右、居中對齊
問題: 某個字典存儲了一系列屬性值
{ "loDist":100.0, "smartCull":0.04, "farclip":477 }
在程序中想以工整的格式進行輸出,如何處理?
解決方案:
方法一: 使用字符串的str.ljust(),str.rjust(),str.center()進行,右,居中對齊
方法二: 使用format方法,傳遞類似'<20','>20','^20'參數(shù)完成同樣任務(wù)
In [1]: s = 'abc' In [2]: s.ljust(20) Out[2]: 'abc ' In [3]: s.ljust(20,'=') Out[3]: 'abc=================' In [4]: s.center(20) Out[4]: ' abc ' In [5]: format(s,'<20') Out[5]: 'abc ' In [6]: d = { ...: "loDist":100.0, ...: "smartCull":0.04, ...: "farclip":477 ...: } In [7]: d.keys() Out[7]: ['loDist', 'smartCull', 'farclip'] In [8]: w =max(map(len,d.keys())) In [9]: for k in d: ...: print k.ljust(w),':',d[k] ...: loDist : 100.0 smartCull : 0.04 farclip : 477
2.去掉不需要的字符串
問題:
1.過濾掉用戶輸入中前后多余的空白字符: ' nick@gmail.com '
2.過濾某windows下編輯文本中的'\r': 'hello world\r\n'
3.去掉文本中的unicode組合符號(音調(diào)):u'zǒu'
解決方案:
方法一: 字符串strip(),lstrip(),rstrip()方法去掉字符串兩端字符
方法二:刪除單個固定位置的字符,可以使用切片+拼接的方式
方法三:字符串的replace方法或正則表達式re.sub()方法刪除任意位置字符
方法四:字符串translate()方法,可以同時刪除多種不同字符
In [1]: s = ' abc 123 ' In [2]: s.strip() Out[2]: 'abc 123' In [3]: s.lstrip() Out[3]: 'abc 123 ' In [4]: s = '-----ab+++++' In [5]: s.strip('-+') Out[5]: 'ab' In [6]: s = 'abc:123' In [7]: s[:3]+s[4:] Out[7]: 'abc123' In [8]: s = '\tabc\t123\txyz' # 去除\t In [9]: s.replace('\t','') Out[9]: 'abc123xyz' In [10]: s = '\tabc\t123\txyz\ropq\r' In [11]: import re # 去除\t\r In [12]: re.sub('[\t\r]','',s) Out[12]: 'abc123xyzopq' In [13]: s = 'abc\refg\n\2342\t' # 去除\t\r\n In [14]: s.translate(None,'\t\r\n') Out[14]: 'abcefg\x9c2' In [15]: u = u'zǒu' In [16]: u Out[16]: u'z\u01d2u' In [17]: print u.translate({0x01d2:None}) zu
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Macbook安裝Python最新版本、GUI開發(fā)環(huán)境、圖像處理、視頻處理環(huán)境詳解
這篇文章主要介紹了Macbook安裝Python最新版本(3.6.4)、GUI開發(fā)環(huán)境、圖像處理、視頻處理環(huán)境詳解,需要的朋友可以參考下2020-02-02keras 實現(xiàn)輕量級網(wǎng)絡(luò)ShuffleNet教程
這篇文章主要介紹了keras 實現(xiàn)輕量級網(wǎng)絡(luò)ShuffleNet教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python中pandas模塊DataFrame創(chuàng)建方法示例
這篇文章主要介紹了Python中pandas模塊DataFrame創(chuàng)建方法,結(jié)合實例形式分析了DataFrame的功能,以及pandas模塊基于列表、字段與數(shù)組創(chuàng)建DataFrame的相關(guān)操作技巧,需要的朋友可以參考下2018-06-06Jmeter通過OS進程取樣器調(diào)用Python腳本實現(xiàn)參數(shù)互傳
這篇文章主要介紹了Jmeter通過OS進程取樣器調(diào)用Python腳本實現(xiàn)參數(shù)互傳,描述在cmd中調(diào)用上面的Python腳本并傳入兩個參數(shù)展開主題,具有一定的參考價值,需要的小伙伴可以參考一下2022-03-03Python基于similarities實現(xiàn)文本語義相似度計算和文本匹配搜索
similarities?實現(xiàn)了多種相似度計算、匹配搜索算法,支持文本、圖像,python3開發(fā),下面我們就來看看如何使用similarities實現(xiàn)文本語義相似度計算和文本匹配搜索吧2024-03-03