为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪9158850 2019-11-14 09:45:22
我正在使用.txt文件。我想要文件中没有非ASCII字符的文本字符串。但是,我想留空格和句点。目前,我也正在剥离它们。这是代码:def onlyascii(char):    if ord(char) < 48 or ord(char) > 127: return ''    else: return chardef 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()以保留空格和句点?我想这并不太复杂,但我无法弄清楚。
查看完整描述

3 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

您的问题不明确;前两个句子加在一起表示您相信空格和“句点”是非ASCII字符。这是不正确的。等于ord(char)<= 127的所有字符都是ASCII字符。例如,您的函数不包括这些字符!“#$%&\'()* +,-。/,但包括其他几个字符,例如[] {}。


请退后一步,三思而后行,然后编辑您的问题以告诉我们您要做什么,而无需提及ASCII单词,以及为什么您认为ord(char)> = 128这样的chars是可忽略的。另外:哪个版本的Python?输入数据的编码是什么?


请注意,您的代码以单个字符串的形式读取整个输入文件,并且您对另一个答案的注释(“最佳解决方案”)意味着您无需关心数据中的换行符。如果您的文件包含这样的两行:


this is line 1

this is line 2

结果将是'this is line 1this is line 2'……您真正想要的是什么?


更好的解决方案包括:


过滤器功能比一个更好的名字 onlyascii

认识到如果要保留参数,则过滤器函数仅需要返回真实值:


def filter_func(char):

    return char == '\n' or 32 <= ord(char) <= 126

# and later:

filtered_data = filter(filter_func, data).lower()


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 695 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信