我正在使用 Python 2.7 读取一个 ASCII 数据流,其中包括带小数位的非负数,但也包括“垃圾字符”,包括不可打印的字符、字母和标点符号。我可以通过这种方式去掉不可打印的内容:
rawdata2 = filter(lambda x: x in string.printable, rawdata)
但是留下这样的字符串:
Ri-G2015,2,20.23,9.13,273.1- ZW;w;K-;-A;B`R
去除除数字和小数点 (.) 以外的所有内容的好方法是什么,所以我只剩下这个:
2015,2,20.23,9.13,273.1
请您参考如下方法:
更快的方法是使用正则表达式:
import re
rawdata2 = re.sub('[^0-9,.]', '', rawdata)
这只是删除不在集合 0-9 , . 中的任何字符(通过用空字符串替换它们)。这比过滤 100 次重复输入字符串的方法快两倍多,而且更简洁。
最快的方法(如果您要处理大量文本)是使用 string.translate:
deltable = "".join(chr(c) for c in xrange(256) if chr(c) not in "0123456789,.")
rawdata2 = string.translate(rawdata, None, deltable)
这比您原来的过滤方法快 100 倍以上。
