学习《Python Cookbook》第三版
想去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。
strip() 方法能用于删除开始或结尾的字符。 lstrip() 和 rstrip() 分别从左和从右执行删除操作。默认情况下,这些方法会去除空白字符,但是你也可以指定其他字符。比如:
my_text = ' Yes, Okay ' print('@' + my_text) # "@ Yes, Okay " print('@' + my_()) # "@Yes, Okay" print('@' + my_()) # "@Yes, Okay " print('@' + my_()) # "@ Yes, Okay"
my_text = '====Yes, Okay---' print('@{}@'.format(my_())) # @====Yes, Okay---@ print('@{}@'.format(my_('='))) # @Yes, Okay---@ print('@{}@'.format(my_('-'))) # @====Yes, Okay@ print('@{}@'.format(my_('-='))) # @Yes, Okay@
这些 strip() 方法在读取和清理数据以备后续处理的时候是经常会被用到的。比如,你可以用它们来去掉空格,引号和完成其他任务。但是需要注意的是去除操作不会对字符串的中间的文本产生任何影响。比如:
my_text = ' Yes Okay ' print('@{}@'.format(my_(''))) # @ Yes Okay @
如果你想处理中间的空格,那么你需要求助其他技术。比如使用 replace() 方法或者是用正则表达式替换。示例如下:
my_text = ' Yes Okay ' print('@{}@'.forma(' ', ''))) # @YesOkay@
import re my_text = ' Yes Okay ' print('@{}@'.forma(r'\s+', ' ', my_text))) # @ Yes Okay @
通常情况下想将字符串 strip 操作和其他迭代操作相结合,比如从文件中读取多行数据。如果是这样的话,那么生成器表达式就可以大显身手了。比如:
""" 源数据 "cat",88,3 "dog",188,2 "monkey", 288,1 """ """ "cat",88,3 "dog",188,2 "monkey", 288,1 """ with open('../data;) as f_obj: lines = () for line in f_obj) for line in lines: print(line)
在这里,表达式 lines = () for line in f) 执行数据转换操作。这种方式非常高效,因为它不需要预先读取所有数据放到一个临时的列表中去。它仅仅只是创建一个生成器,并且每次返回行之前会先执行 strip 操作。
官方给strip()说明:
([chars])
Return a copy of the string with the leading and trailing characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix or suffix; rather, all combinations of its values are stripped:
The outermost leading and trailing chars argument values are stripped from the string. Characters are removed from the leading end until reaching a string character that is not contained in the set of characters in chars. A similar action takes place on the trailing end.
返回删除前缀和后缀字符的字符串的副本。 chars参数是一个字符串,指定要删除的字符集。 如果省略或为None,则chars参数默认为删除空格。 chars参数不是前缀或后缀; 而是删除其值的所有组合
从字符串中去除最外面的前和后字符char参数值。 从前端删除字符,直到不包含在chars字符集中的字符串字符。 在尾端发生类似的动作
my_text = '!!!### 1507 ###' print(my_text) # !!!### 1507 ### print('@{}@'.format(my_('!#'))) # @ 1507 @ print('@{}@'.format(my_('!# '))) # @1507@