juan503949201的个人博客分享 http://blog.sciencenet.cn/u/juan503949201

博文

python-删除非ASCII字符,但离开句点和空格

已有 6436 次阅读 2015-2-10 18:37 |个人分类:python|系统分类:科研笔记

转(别人在论坛上提出的问题)

我正在与一个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()留有空格和句点?我想这不是,但我不能弄明白。 谢谢。


1. 你可以过滤所有字符不属于string.printable,像这样的字符串:

>>> s = "somex00string. withx15 funny characters"

>>> import string

>>> filter(lambda x: x in string.printable, s)

'somestring. with funny characters'

string.printable我的机器上包含:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ tnrx0bx0c


2. 如果你想打印的ASCII字符,你可能应该纠正你的代码:

if ord(char) < 32 or ord(char) > 126: return ''

这是等价的,以string.printable(来自@jterrace答案),除了缺少回车和制表符的('\ T',为'\ n','\ X0B' CodeGo.net,'\ X0C'和'\ r'),但不对应的范围内对您的问题


3. 一个简单的方法来改变不同的编解码器,编码是()或解码()。在你的情况,你要转换为ASCII和忽略不支持的所有符号。例如,瑞典的字母A是不是一个ASCII字符:

>>>s = u'Good bye in Swedish is Hej dxc3'

>>>s = s.encode('ascii',errors='ignore')

>>>print s Good bye in Swedish is Hej d


4. 你的问题是结合在一起的前两句暗示你认为空间和“期间”都是非ASCII字符。这是不正确的。所有字符,这样奥德(炭)<=127是ASCII字符。例如,你的函数不包括这些字符“#$%&\'()* +,-。/但包括其他一些如[] {}。 请退后一步,想了一下,修改你的问题你正在尝试做什么,字的ASCII,以及为什么你认为字符,使得奥德(炭)>=128都将被忽略。另外:其中的Python版本?什么是你的输入数据的编码? 请注意,您的代码读取整个输入文件作为一个字符串,和你的(“伟大的解决方案”),以另一种答案意味着你不关心换行符在您的数据。如果您的文件包含两行是这样的:this is line 1this is line 2其结果将是'this is line 1this is line 2'...是你真正想要的? 更大的解决方案应包括:(1)一个比更好的过滤函数onlyascii(2)认识到,一个过滤器需要返回一个truthy值,如果要保留:def filter_func(char): return char == 'n' or 32 <= ord(char) <= 126# and later: filtered_data = filter(filter_func, data).lower()




https://blog.sciencenet.cn/blog-1271266-867106.html

上一篇:Python中的结构化数据分析利器-Pandas简介
下一篇:Convert Gene Symbols To EntrzID
收藏 IP: 14.204.63.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-22 09:58

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部