Python實用技法第30篇:從字符串中去掉不須要的字符

上一篇文章: Python實用技法第29篇:用正則表達式處理Unicode字符
下一篇文章: Python實用技法第31篇:文本過濾和清理

 問題

咱們想在字符串的開始、結尾或中間去掉不須要的字符,好比說空格符。正則表達式

 解決方案

strip()方法可用來從字符串的開始和結尾處去掉字符。lstrip()和rstrip()可分別從左或從右側開始執行去除字符的操做。默認狀況下這些方法去除的是空格符,但也能夠指定其餘的字符。例如:segmentfault

>>> # Whitespace stripping
>>> s = ' hello world \n'
>>> s.strip()
'hello world'
>>> s.lstrip()
'hello world \n'
>>> s.rstrip()
' hello world'
>>>

>>> # Character stripping
>>> t = '-----hello====='
>>> t.lstrip('-')
'hello====='
>>> t.strip('-=')
'hello'

 討論

當咱們讀取並整理數據以待稍後的處理時經常會用到這類strip()方法。例如,能夠用它們來去掉空格、移除引號等。spa

須要注意的是,去除字符的操做並不會對位於字符串中間的任何文本起做用。例如:code

>>> s = ' hello    world     \n'
>>> s = s.strip()
>>> s
'hello       world'
>>>

若是要對裏面的空格執行某些操做,應該使用其餘技巧,好比使用replace()方法或正則表達式替換。例如:ip

>>> s.replace(' ', '')
'helloworld'
>>> import re
>>> re.sub('\s+', ' ', s)
'hello world'
>>>

咱們一般會遇到的狀況是將去除字符的操做同某些迭代操做結合起來,好比說從文件中讀取文本行。若是是這樣的話,那就到了生成器表達式大顯身手的時候了。例如:字符串

with open(filename) as f:
    lines = (line.strip() for line in f)
    for line in lines:
        ...

這裏,表達式lines = (line.strip() for line in f)的做用是完成數據的轉換[1]。它很高效,由於這裏並無先將數據讀取到任何形式的臨時列表中。它只是建立一個迭代器,在全部產生出的文本行上都會執行strip操做。get

對於更高級的strip操做,應該轉而使用translate()方法。請參見下一節以得到進一步的細節。it

上一篇文章: Python實用技法第29篇:用正則表達式處理Unicode字符
下一篇文章: Python實用技法第31篇:文本過濾和清理
相關文章
相關標籤/搜索