我正在处理一个.txt文件。我想从文件中没有非ASCII字符的文本字符串。但是,我想留下空格和句号。目前,我也在剥离它们。代码如下:
def onlyascii(char):
if ord(char) < 48 or ord(char) > 127: return ''
else: return char
def get_my_string(file_path):
f=open(file_path,'r')
data=f.read()
f.close()
filtered_data=filter(onlyascii, data)
filtered_data = filtered_data.lower()
return filtered_data
我应该如何修改onlyascii()来保留空格和句号?我想这不是太复杂,但我想不出来。
发布于 2011-12-31 18:29:33
您可以使用string.printable过滤字符串中不可打印的所有字符,如下所示:
>>> s = "some\x00string. with\x15 funny characters"
>>> import string
>>> printable = set(string.printable)
>>> filter(lambda x: x in printable, s)
'somestring. with funny characters'
我机器上的string.printable包含:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c
编辑:在Python 3上,filter将返回一个iterable。获取回字符串的正确方法是:
''.join(filter(lambda x: x in printable, s))
发布于 2016-02-23 14:14:14
根据@artfulrobot的说法,这应该比filter和lambda更快:
import re
re.sub(r'[^\x00-\x7f]',r'', your-non-ascii-string)
发布于 2017-09-14 18:27:52
使用流利的Python (Ramalho) -强烈推荐。受第2章启发的列表理解单行者:
onlyascii = ''.join([s for s in data if ord(s) < 127])
onlymatch = ''.join([s for s in data if s in
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'])
https://stackoverflow.com/questions/8689795
复制相似问题