Unicode的错误ASCII不能编码字符
问题描述:
我试图导入CSV文件,以培养我的分类,但我不断收到此错误Unicode的错误ASCII不能编码字符
traceback (most recent call last):
File "updateClassif.py", line 17, in <module>
myClassif = NaiveBayesClassifier(fp, format="csv")
File "C:\Python27\lib\site-packages\textblob\classifiers.py", line 191, in __init__
super(NLTKClassifier, self).__init__(train_set, feature_extractor, format, **kwargs)
File "C:\Python27\lib\site-packages\textblob\classifiers.py", line 123, in __init__
self.train_set = self._read_data(train_set, format)
File "C:\Python27\lib\site-packages\textblob\classifiers.py", line 143, in _read_data
return format_class(dataset, **self.format_kwargs).to_iterable()
File "C:\Python27\lib\site-packages\textblob\formats.py", line 68, in __init__
self.data = [row for row in reader]
File "C:\Python27\lib\site-packages\textblob\unicodecsv\__init__.py", line 106, in next
row = self.reader.next()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe6' in position 55: ordinal not in range(128)
CSV文件包含160万行的鸣叫所以我相信一些推文包含特殊字符。我尝试使用开放式办公室保存它作为某人推荐,但仍然是相同的结果。我也尝试使用拉丁编码,但结果相同。 这是我的代码:
with codecs.open('tr.csv', 'r' ,encoding='latin-1') as fp:
myClassif = NaiveBayesClassifier(fp, format="csv")
这是从库中我使用的代码:
def __init__(self, csvfile, fieldnames=None, restkey=None, restval=None,
dialect='excel', encoding='utf-8', errors='strict', *args,
**kwds):
if fieldnames is not None:
fieldnames = _stringify_list(fieldnames, encoding)
csv.DictReader.__init__(self, csvfile, fieldnames, restkey, restval, dialect, *args, **kwds)
self.reader = UnicodeReader(csvfile, dialect, encoding=encoding,
errors=errors, *args, **kwds)
if fieldnames is None and not hasattr(csv.DictReader, 'fieldnames'):
# Python 2.5 fieldnames workaround. (http://bugs.python.org/issue3436)
reader = UnicodeReader(csvfile, dialect, encoding=encoding, *args, **kwds)
self.fieldnames = _stringify_list(reader.next(), reader.encoding)
self.unicode_fieldnames = [_unicodify(f, encoding) for f in
self.fieldnames]
self.unicode_restkey = _unicodify(restkey, encoding)
def next(self):
row = csv.DictReader.next(self)
result = dict((uni_key, row[str_key]) for (str_key, uni_key) in
izip(self.fieldnames, self.unicode_fieldnames))
rest = row.get(self.restkey)
答
在Python2中,不支持unicode。所以你必须传入某种迭代器对象(如文件),它只产生字节串。
这意味着你的代码应该是这样的:
with open('tr.csv', 'rb') as fp:
myClassif = NaiveBayesClassifier(fp, format="csv")
但是请注意,CSV文件必须被编码为UTF-8。如果不是,那么显然需要首先将其转换为UTF-8才能使上述代码正常工作。
答
注意回溯说恩 codeError,不DecodeError。它看起来像NaiveBayesClassifier期待ascii。或者让它接受Unicode,或者,如果这对你的应用程序是好的,用'?'替换非ASCII字符。或者其他的东西。
请发布追溯的**全文**。另外,请指出您使用的Python版本。 – MattDMo
它可能是utf = 8编码的。试试看。 – tdelaney
@tdelaney我尝试过使用utf = 8并且它返回给我这个:“UnicodeDecodeError:'utf8'编解码器无法解码位置35中的字节0xe6:无效继续字节” – Pca