Python字串處理執行個體詳解,python字串執行個體

來源:互聯網
上載者:User

Python字串處理執行個體詳解,python字串執行個體

Python字串處理執行個體詳解

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

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

問題: 我們要把某個字串依據分隔字元號拆分不同的欄位,該字串包含多種不同的分隔字元,例如:

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

其中;,|,\t 都是分隔字元號,如何處理?

方法一: 連續使用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 resprint mySplit(s,';|,\t')輸出:['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

方法二: 使用Regex的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']

二、調整字串中文字格式設定

1. 如何判斷字串a是否以字串b開頭或結尾

問題:某檔案系統目錄下有一系列檔案:a.py,quicksort.c,stack.cpp,b.sh , 編寫程式給其中所有.sh檔案和.py檔案加上使用者可執行許可權?

解決方案: 使用字串中的str.startswith()和end.startswith()方法 (注意:多個匹配時參數使用元組)

In [1]: import os# 列出目前的目錄以.sh和以.py結尾的檔案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 檔案許可權In [4]: os.stat('a.py').st_modeOut[4]: 33204# 把檔案許可權轉換成8進位,即為平常看到的許可權In [5]: oct(os.stat('a.py').st_mode)Out[5]: '0100664'# 變更檔許可權,添加一個可執行許可權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.如何對字串中文本的格式進行調整

問題: 某軟體的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

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

解決方案:使用Regexre.sub()方法做字串替換,利用Regex的擷取的群組捕獲每個部分內容,在字串中調整各個組的捕獲順序。

In [1]: import reIn [2]: log = open('/var/log/dpkg.log').read()# (\d{4}) 匹配到4個數字為一個擷取的群組,其順序為1。故後面替換用\1放到最後,r是為了防止字串被轉義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# 也可以為每個擷取的群組起個名稱,而不使用預設順序來處理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.如何將多個小字串拼接成一個大的字串

問題:在程式中我們將各個參數按次序收集到列表中: ["<0112>", "<32>","<1024x768>","<60>" ],要把各個參數拼接成資料報進行發送"<0112><32><1024x768><60>"

解決方案:

方法一:迭代列表,連續使用“+”操作依次拼接每一個字串

In [1]: pl = ["<0112>", "<32>","<1024x768>","<60>" ]In [2]: s = ''# 這種方法會產生許多臨時結果,會造成資源的浪費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>'

有個列表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'參數完成同樣任務

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組合符號(音調):u'zǒu'

解決方案:

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

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

方法三:字串的replace方法或Regexre.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'# 去除\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

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.