上一篇文章: Python實用技法第29篇:用正則表達式處理Unicode字符
下一篇文章:
問題
我們想在字符串的開始、結尾或中間去掉不需要的字符,比如說空格符。
解決方案
strip()方法可用來從字符串的開始和結尾處去掉字符。lstrip()和rstrip()可分別從左或從右側開始執行去除字符的操作。默認情況下這些方法去除的是空格符,但也可以指定其他的字符。例如:
>>> # 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()方法。例如,可以用它們來去掉空格、移除引號等。
需要注意的是,去除字符的操作並不會對位於字符串中間的任何文本起作用。例如:
>>> s = ' hello world \n'
>>> s = s.strip()
>>> s
'hello world'
>>>
如果要對裏面的空格執行某些操作,應該使用其他技巧,比如使用replace()方法或正則表達式替換。例如:
>>> 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操作。
對於更高級的strip操作,應該轉而使用translate()方法。請參見下一節以獲得進一步的細節。