2013-04-25 36 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不會消失,而且你必須在某個時候學習 - 所以現在是開始的好時機。