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篇:文本过滤和清理
相关文章
相关标签/搜索