最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年05月18日 09:04:00   投稿:lqh  
這篇文章主要介紹了Python字符串處理實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

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

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

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

問(wèn)題: 我們要把某個(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 res

print mySplit(s,';|,\t')

輸出:
['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

方法二: 使用正則表達(dá)式的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é)尾

問(wèn)題:某文件系統(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_mode
Out[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]: 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.如何對(duì)字符串中文本的格式進(jìn)行調(diào)整

問(wèn)題: 某軟件的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

我們想把其中日期改為美國(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 re

In [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.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

# 也可以為每個(gè)捕獲組起個(gè)名稱,而不使用默認(rèn)順序來(lái)處理
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.如何將多個(gè)小字符串拼接成一個(gè)大的字符串

問(wèn)題:在程序中我們將各個(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]: s
Out[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ì)齊

問(wèn)題: 某個(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.0
smartCull : 0.04
farclip : 477

2.去掉不需要的字符串

問(wèn)題:

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

2.過(guò)濾某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'
# 去除\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

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

相關(guān)文章

  • Python類繼承和多態(tài)原理解析

    Python類繼承和多態(tài)原理解析

    這篇文章主要介紹了python類繼承和多態(tài)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python中的隨機(jī)數(shù)種子seed()用法說(shuō)明

    python中的隨機(jī)數(shù)種子seed()用法說(shuō)明

    這篇文章主要介紹了python中的隨機(jī)數(shù)種子seed()用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 如何實(shí)現(xiàn)在遠(yuǎn)程linux服務(wù)器上運(yùn)行python代碼

    如何實(shí)現(xiàn)在遠(yuǎn)程linux服務(wù)器上運(yùn)行python代碼

    這篇文章主要介紹了如何實(shí)現(xiàn)在遠(yuǎn)程linux服務(wù)器上運(yùn)行python代碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • ubuntu中配置pyqt4環(huán)境教程

    ubuntu中配置pyqt4環(huán)境教程

    本文給大家分享的是在Ubuntu系統(tǒng)中配置pyqt4的詳細(xì)教程,有需要的小伙伴可以參考下
    2017-12-12
  • 詳解Python yaml模塊

    詳解Python yaml模塊

    這篇文章主要介紹了Python yaml模塊的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • Python中使用threading.Event協(xié)調(diào)線程的運(yùn)行詳解

    Python中使用threading.Event協(xié)調(diào)線程的運(yùn)行詳解

    這篇文章主要介紹了Python中使用threading.Event協(xié)調(diào)線程的運(yùn)行詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python3中numpy函數(shù)tile的用法詳解

    python3中numpy函數(shù)tile的用法詳解

    今天小編就為大家分享一篇python3中numpy函數(shù)tile的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python中Tkinter 窗口之輸入框和文本框的實(shí)現(xiàn)

    python中Tkinter 窗口之輸入框和文本框的實(shí)現(xiàn)

    這篇文章主要介紹了python中Tkinter 窗口之輸入框和文本框的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Django 請(qǐng)求Request的具體使用方法

    Django 請(qǐng)求Request的具體使用方法

    這篇文章主要介紹了Django 請(qǐng)求Request的具體使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • python接口自動(dòng)化(十七)--Json 數(shù)據(jù)處理---一次爬坑記(詳解)

    python接口自動(dòng)化(十七)--Json 數(shù)據(jù)處理---一次爬坑記(詳解)

    這篇文章主要介紹了python Json 數(shù)據(jù)處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

黑河市| 鄂尔多斯市| 北海市| 丰台区| 桃园市| 唐河县| 彩票| 姚安县| 广东省| 友谊县| 高阳县| 衡阳市| 桑植县| 三门县| 吉隆县| 平顺县| 大新县| 金华市| 县级市| 河北区| 芒康县| 肥城市| 宜川县| 内乡县| 双鸭山市| 加查县| 奉新县| 鄂州市| 安仁县| 万山特区| 明星| 嘉峪关市| 霍州市| 绍兴县| 天祝| 安吉县| 新安县| 手游| 佛坪县| 石阡县| 鱼台县|