国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python字符串處理實(shí)例詳解

2019-11-25 16:10:34
字體:
供稿:網(wǎng)友

Python字符串處理實(shí)例詳解

一、拆分含有多種分隔符的字符串

1.如何拆分含有多種分隔符的字符串

問題: 我們要把某個(gè)字符串依據(jù)分隔符號(hào)拆分不同的字段,該字符串包含多種不同的分隔符,例如:

s = "ab;cd|efg|hi,jkl|mn/topq;rst,uvw/txyz"

其中;,|,/t 都是分隔符號(hào),如何處理?

方法一: 連續(xù)使用str.split()方法,每次處理一種分隔符號(hào)

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 resprint mySplit(s,';|,/t')輸出:['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

方法二: 使用正則表達(dá)式的re.split()方法,一次性拆分字符串

import res = "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()方法 (注意:多個(gè)匹配時(shí)參數(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_modeOut[4]: 33204# 把文件權(quán)限轉(zhuǎn)換成8進(jìn)制,即為平??吹降臋?quán)限In [5]: oct(os.stat('a.py').st_mode)Out[5]: '0100664'# 更改文件權(quán)限,添加一個(gè)可執(zhí)行權(quán)限In [6]: os.chmod('a.py',os.stat('a.py').st_mode | stat.S_IXUSR)In [7]: lltotal 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.如何對(duì)字符串中文本的格式進(jìn)行調(diào)整

問題: 某軟件的log文件,其中日期格式為“yyyy-mm-dd”:

2017-05-08 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.22017-05-08 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.22017-05-08 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.22017-05-08 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.22017-05-08 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.22017-05-08 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.22017-05-08 09:12:48 startup packages configure09:12:48 startup packages configure

我們想把其中日期改為美國(guó)日期的格式"mm/dd/yyyy",2017-05-08 ==> 05/08/2017 ,應(yīng)如何處理?

解決方案:使用正則表達(dá)式re.sub()方法做字符串替換,利用正則表達(dá)式的捕獲組捕獲每個(gè)部分內(nèi)容,在字符串中調(diào)整各個(gè)組的捕獲順序。

In [1]: import reIn [2]: log = open('/var/log/dpkg.log').read()# (/d{4}) 匹配到4個(gè)數(shù)字為一個(gè)捕獲組,其順序?yàn)?。故后面替換用/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.205/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.205/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.205/08/2017 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.205/08/2017 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.205/08/2017 09:12:48 startup packages configure# 也可以為每個(gè)捕獲組起個(gè)名稱,而不使用默認(rèn)順序來處理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.205/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.205/08/2017 09:12:48 status unpacked passwd:amd64 1:4.2-3.1ubuntu5.205/08/2017 09:12:48 status half-configured passwd:amd64 1:4.2-3.1ubuntu5.205/08/2017 09:12:48 status installed passwd:amd64 1:4.2-3.1ubuntu5.205/08/2017 09:12:48 startup packages configure

三、字符串拼接

1.如何將多個(gè)小字符串拼接成一個(gè)大的字符串

問題:在程序中我們將各個(gè)參數(shù)按次序收集到列表中: ["<0112>", "<32>","<1024x768>","<60>" ],要把各個(gè)參數(shù)拼接成數(shù)據(jù)報(bào)進(jìn)行發(fā)送"<0112><32><1024x768><60>"

解決方案:

方法一:迭代列表,連續(xù)使用“+”操作依次拼接每一個(gè)字符串

In [1]: pl = ["<0112>", "<32>","<1024x768>","<60>" ]In [2]: s = ''# 這種方法會(huì)產(chǎn)生許多臨時(shí)結(jié)果,會(huì)造成資源的浪費(fèi)In [3]: for p in pl: ...:  s = s + p ...:  print s ...:  <0112><0112><32><0112><32><1024x768><0112><32><1024x768><60>In [4]: sOut[4]: '<0112><32><1024x768><60>'

方法二:使用str.join()方法,更加快速的拼接列表中所有字符串

In [5]: ''.join(pl)Out[5]: '<0112><32><1024x768><60>'

有個(gè)列表l = ['abc',123,45,'xyz'],如何讓123和45以字符串的方式拼接

In [6]: l = ['abc',123,45,'xyz']# 使用生成器表達(dá)式,開銷比列表表達(dá)式小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'

四、字符串居中對(duì)齊

1.如何對(duì)字符串進(jìn)行左、右、居中對(duì)齊

問題: 某個(gè)字典存儲(chǔ)了一系列屬性值

{ "loDist":100.0, "smartCull":0.04, "farclip":477}

在程序中想以工整的格式進(jìn)行輸出,如何處理?

解決方案:

方法一: 使用字符串的str.ljust(),str.rjust(),str.center()進(jìn)行,右,居中對(duì)齊

方法二: 使用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.0smartCull : 0.04farclip : 477

2.去掉不需要的字符串

問題:

        1.過濾掉用戶輸入中前后多余的空白字符: ' nick@gmail.com '

2.過濾某windows下編輯文本中的'/r': 'hello world/r/n'

3.去掉文本中的unicode組合符號(hào)(音調(diào)):u'zǒu'

解決方案:

方法一: 字符串strip(),lstrip(),rstrip()方法去掉字符串兩端字符

方法二:刪除單個(gè)固定位置的字符,可以使用切片+拼接的方式

方法三:字符串的replace方法或正則表達(dá)式re.sub()方法刪除任意位置字符

方法四:字符串translate()方法,可以同時(shí)刪除多種不同字符

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'# 去除/tIn [9]: s.replace('/t','')Out[9]: 'abc123xyz'In [10]: s = '/tabc/t123/txyz/ropq/r'In [11]: import re# 去除/t/rIn [12]: re.sub('[/t/r]','',s)Out[12]: 'abc123xyzopq'In [13]: s = 'abc/refg/n/2342/t'# 去除/t/r/nIn [14]: s.translate(None,'/t/r/n')Out[14]: 'abcefg/x9c2'In [15]: u = u'zǒu'In [16]: uOut[16]: u'z/u01d2u'In [17]: print u.translate({0x01d2:None})zu

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 扬中市| 武威市| 洱源县| 塔河县| 盐池县| 织金县| 车险| 隆化县| 晴隆县| 满城县| 天等县| 余干县| 太原市| 枣阳市| 兖州市| 博野县| 和林格尔县| 克东县| 仁怀市| 武山县| 台中市| 台北市| 连平县| 无棣县| 镇康县| 巴塘县| 临安市| 罗城| 石阡县| 白沙| 通辽市| 自治县| 鄯善县| 松滋市| 莫力| 清徐县| 宜宾市| 泾川县| 德州市| 公安县| 肃北|