我有一个非常大的csv文件,如下所示:
关键字,曝光
descargar juegos gratis,951
ãƒ'ã,½ã,³ãƒ³kakakucom,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 gratis,951
公司会议,155
租车,356
智能,1224
吉他标签,064
简而言之:如果行中存在任何非ascii字符,则必须删除整行。
谢谢!
答案 0 :(得分:3)
简单方法:您可以尝试对其进行解码,并捕获异常。
try:
string.decode('ascii')
except UnicodeDecodeError:
print "Not ascii"
答案 1 :(得分: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
答案 2 :(得分: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 ==“个人电脑”,用片假名写的)和第二串(英语)谷歌翻译检测为中文,翻译为“英文翻译”。