2013-04-25 94 views
-2

如何消除字符,例如“它一句话消除不需要的字符

这些字符导致我的python程序失败。我如何处理这些字符,我的输入文件有很多。

请帮忙。谢谢

+0

你能否更具体一点,你想摆脱每一个非英文字符?只是忽略他们?另外为什么不让他们? – jamylak 2013-04-25 10:08:44

+1

也许你需要修复你的程序来正确处理unicode输入呢?不要只删除非ASCII字符,正确处理它们! – 2013-04-25 10:08:48

+0

@jamylak - 是的,我想摆脱所有不是英语 – user1946217 2013-04-25 10:09:52

回答

1

使用ord()检查字符串中每个字符的ASCII值,如果它位于32和126之间(包括两者),那么它是一个有效的字符,否则忽略。

In [23]: strs="“It" 

In [24]: "".join(x for x in strs if 31<ord(x)<127) 
Out[24]: 'It' 

,或者如果你只是想,按字母顺序:

In [27]: import string 

In [28]: "".join(x for x in strs if x in string.ascii_letters) 
Out[28]: 'It' 

筛选出整个字,使用all()与我们在第一种情况下使用的条件:

In [35]: strs="“It foo bar€" 

In [36]: [word for word in strs.split() if all(31<ord(c)<127 for c in word) ] 
Out[36]: ['foo'] 
+0

谢谢ashwini,如果我要删除包含eng以外其他字符的整个单词..如何检查这个? – user1946217 2013-04-25 10:14:22

+1

这是一个糟糕的主意,不要只是过滤掉Unicode字符,学会正确处理它们,即使您的输入将完全处于英文,最终有人会在软件的输入字段或数据文件中输入“curly quotes”(或短划线),而且还需要处理Unicode。不要过滤它,学会处理它。 – rmunn 2013-04-25 10:20:07

+0

@ user1946217我已添加该部分。 – 2013-04-25 10:24:31

1

这看起来像UTF -8被误解为不同的编码。请尝试:

fixed_input_string = input_string.decode('utf-8') 

并查看是否可以解决您的问题。

顺便说一句,如果你不知道我刚才说什么,请现在阅读http://www.joelonsoftware.com/articles/Unicode.html。如果您尝试编写只接受“英文”文本的软件(这实际上意味着ASCII,因为在标准英文文本中有很多字符不是ASCII),您的软件将会在各种“有趣的“ 方法。 Unicode不会消失,而且你必须在某个时候学习 - 所以现在是开始的好时机。