2011-04-13 40 views
1

除去非ASCII感染行我有一個非常大的CSV文件看起來像這樣:如何在我的CSV

關鍵字,展示
descargar JUEGOS免費,951
ãƒ'ã,½ã,³ãƒ³kakaku COM,451
企業會議,155個
租車,356
智能,1224
吉他譜,064
è<±è¯ç¿»E」,160

我已經閱讀了文件轉換成一個字典,像這樣:

# Read the CSV 
filename = argv[1] 
csvfile = open(filename, 'r') 
csvreader = csv.DictReader(csvfile) 
rows = [] 
for row in csvreader: 
    rows.append(row) 

我將如何刪除與非ASCII字符的行,這樣我只結了:

關鍵字,展示
descargar JUEGOS免費,951
企業會議,155個
租車,356
智能,1224
吉他譜,064

簡而言之:如果行中存在任何非ASCII字符,則必須刪除整行。

謝謝!

+3

...爲什麼不把它正確解碼爲UTF-8呢? – 2011-04-13 22:44:14

+1

另請參閱:https://github.com/jdunck/python-unicodecsv – 2011-04-13 22:50:06

回答

2
import csv, sys 

filename = sys.argv[1] 
csvfile = open(filename, 'r') 
csvreader = csv.DictReader(csvfile) 
rows = [] 
for row in csvreader: 
    try: 
     row['keywords'].decode('ascii') 
     rows.append(row) 
    except UnicodeDecodeError: 
     pass 

print rows 
+0

很乾淨 - 謝謝! – datayoda 2011-04-13 23:06:58

+1

總是以二進制模式(Python 2.x)或'newline ='''(Python 3.x)打開一個csv文件 – 2011-04-14 11:43:59

+0

爲什麼在二進制模式下打開?它看起來對我來說很好 – datayoda 2011-04-15 18:15:50

3

簡單的方法:你可以嘗試解碼它,並捕獲異常。

try: 
    string.decode('ascii') 
except UnicodeDecodeError: 
    print "Not ascii" 
1

萬一你有興趣,你可以很好地遠拋良好的數據;它看起來並不像隨機垃圾對我說:

>>> import unicodedata as ucd 
>>> for x in open('unascii.txt').read().decode('utf8', 'replace'): 
...  if x > u'\x7f': print repr(x), ucd.name(x, '<no name>') 
... 
u'\u30d1' KATAKANA LETTER PA 
u'\u30bd' KATAKANA LETTER SO 
u'\u30b3' KATAKANA LETTER KO 
u'\u30f3' KATAKANA LETTER N 
u'\u82f1' CJK UNIFIED IDEOGRAPH-82F1 
u'\u8bed' CJK UNIFIED IDEOGRAPH-8BED 
u'\u7ffb' CJK UNIFIED IDEOGRAPH-7FFB 
u'\u8bd1' CJK UNIFIED IDEOGRAPH-8BD1 
>>> 

注意文件解碼成功使用UTF-8(如@Ignacio暗示),和表觀胡言亂語的第一束實際上是有意義的(日本pasocom == 「個人電腦」,用Katakana寫成)和第二組(英語翻譯)被谷歌翻譯檢測爲中文,並被翻譯成「英文翻譯」。

+0

你是對的數據不是垃圾,但我需要一個快速的方法來限制只有英文關鍵詞 – datayoda 2011-04-15 18:17:23

+0

@datayoda:'descargar juegos gratis'的前兩個字對我來說看起來不像英語。 – 2011-04-15 23:40:36