如何删除csv中未被ascii感染的行

问题描述

|| 我有一个很大的csv文件,看起来像这样: 关键字,展示次数 笛卡尔免费早餐,951 第451章 公司会议155 租车,356 聪明,1224 第064章 英语翻è¯',160 我已经将文件读入字典,如下所示:
# Read the CSV
filename = argv[1]
csvfile = open(filename,\'r\')
csvreader = csv.DictReader(csvfile)
rows = []
for row in csvreader:
  rows.append(row) 
我将如何删除带有非ASCII字符的行,这样我只能得到以下结果: 关键字,展示次数 笛卡尔免费早餐,951 公司会议155 租车,356 聪明,1224 第064章 简而言之:如果该行中存在任何非ASCII字符,则必须删除整行。 谢谢!     

解决方法

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
    ,简单方法:您可以尝试对其进行解码,并捕获异常。
try:
    string.decode(\'ascii\')
except UnicodeDecodeError:
    print \"Not ascii\"
    ,万一您有兴趣,您很可能会丢掉好数据。在我看来,这似乎不是随意的垃圾:
>>> 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 == \“ personal computer \”,用片假名编写)和第二堆(英语翻译) )被Google翻译检测为中文,并翻译为“英语翻译”。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...