如何使用Python删除非ASCII字符但保留句点和空格?

2024-05-13 18:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理一个.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()以留下空格和句点?我想这不太复杂,但我想不出来。


Tags: 文件path文本txtdatareturndefascii
3条回答

根据@artfulrobot的说法,这应该比filter和lambda更快:

re.sub(r'[^\x00-\x7f]',r'', your-non-ascii-string) 

请参阅此处的更多示例http://stackoverflow.com/questions/20078816/replace-non-ascii-characters-with-a-single-space/20079244#20079244

使用encode()或decode()是更改为其他编解码器的简单方法。在您的示例中,您希望转换为ASCII并忽略所有不受支持的符号。例如,瑞典语字母å不是ASCII字符:

    >>>s = u'Good bye in Swedish is Hej d\xe5'
    >>>s = s.encode('ascii',errors='ignore')
    >>>print s
    Good bye in Swedish is Hej d

编辑:

Python3:str->;字节->;str

>>>"Hej då".encode("ascii", errors="ignore").decode()
'hej d'

Python2:unicode->;str->;unicode

>>> u"hej då".encode("ascii", errors="ignore").decode()
u'hej d'

Python2:str->;unicode->;str(按相反顺序解码和编码)

>>> "hej d\xe5".decode("ascii", errors="ignore").encode()
'hej d'

可以使用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))

相关问题 更多 >