【发布时间】:2019-10-02 20:31:48
【问题描述】:
我昨天工作的代码中突然出现“UnicodeDecodeError”。
文件 “D:\Anaconda\lib\site-packages\IPython\core\interactiveshell.py”,行 3284,在运行代码中 self.showtraceback(running_compiled_code=True)
文件 “D:\Anaconda\lib\site-packages\IPython\core\interactiveshell.py”,行 2021 年,在 showtraceback 中 值, tb, tb_offset=tb_offset)
文件“D:\Anaconda\lib\site-packages\IPython\core\ultratb.py”,行 第1379章 self, etype, value, tb, tb_offset, number_of_lines_of_context)
文件“D:\Anaconda\lib\site-packages\IPython\core\ultratb.py”,行 第1291章 elist = self._extract_tb(tb)
文件“D:\Anaconda\lib\site-packages\IPython\core\ultratb.py”,行 第1272章 返回 traceback.extract_tb(tb)
文件“D:\Anaconda\lib\traceback.py”,第 72 行,在 extract_tb 中 return StackSummary.extract(walk_tb(tb), limit=limit)
文件“D:\Anaconda\lib\traceback.py”,第 364 行,摘录 f.line
文件“D:\Anaconda\lib\traceback.py”,第 286 行,行 self._line = linecache.getline(self.filename, self.lineno).strip()
文件“D:\Anaconda\lib\linecache.py”,第 16 行,在 getline lines = getlines(filename, module_globals)
文件“D:\Anaconda\lib\linecache.py”,第 47 行,在 getlines return updatecache(filename, module_globals)
文件“D:\Anaconda\lib\linecache.py”,第 137 行,在 updatecache 中 行 = fp.readlines()
文件“D:\Anaconda\lib\codecs.py”,第 321 行,解码中 (结果,消耗) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 0xf6 字节 2441: 无效的起始字节
import csv
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
dateiname_TDM = "./TDM_example_small.csv"
dateiname_corpus = "./Topic_Modeling/Input_Data/corpus.mm"
dateiname_dictionary = "./Topic_Modeling/Input_Data/dictionary.dict"
ids = {}
corpus = []
with open(dateiname_TDM, newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=';', quotechar='|')
documente = next(reader, None)[1:]
for rownumber, row in enumerate(reader):
for index, field in enumerate(row):
if index == 0:
if rownumber > 0:
ids[rownumber-1] = field
else:
if rownumber == 0:
corpus.append([])
else:
try:
if field > 0:
corpus[index-1].append((rownumber-1, int(field)))
except ValueError:
corpus[index-1].append((rownumber-1, 0))
【问题讨论】:
-
如果您的代码自昨天以来没有更改,则可能是输入数据已更改。显然您现在正在阅读的 CSV 文件不是用 UTF-8 编码的,但可能是一些 8 位字符集(例如 CP1252)。还请查看this post,解释这是如何不够充分的信息(我们需要知道您认为
byte 0xf6应该被解释为 - “ö”吗?)。
标签: arrays python-3.x list csv unicode