上一篇文章: 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()方法。请参见下一节以获得进一步的细节。