处理CSV

时间:2019-05-15 16:19:03

标签: arrays python-3.x list csv unicode

昨天在我的代码中突然出现“ UnicodeDecodeError”。

  

文件   “ D:\ Anaconda \ lib \ site-packages \ IPython \ core \ interactiveshell.py”,行   3284,在run_code中       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,在structured_traceback中       自我,etype,值,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,在_extract_tb中       返回traceback.extract_tb(tb)

     

extract_tb中的文件“ D:\ Anaconda \ lib \ traceback.py”,第72行       返回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)

     

getlines中的文件“ D:\ Anaconda \ lib \ linecache.py”,第47行       返回updatecache(filename,module_globals)

     

updatecache中的文件“ D:\ Anaconda \ lib \ linecache.py”,第137行       行= fp.readlines()

     

文件“ D:\ Anaconda \ lib \ codecs.py”,行321,在解码中       (结果,消耗)= self._buffer_decode(数据,self.errors,最终)

     

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))

1 个答案:

答案 0 :(得分:0)

我不完全确定2441号位置是什么,但可能是以下之一:

  • 特殊的非ASCII /扩展ASCII字符,在这种情况下,请执行the_string.encode("UTF-8")或在encoding = "UTF-8"函数中打开open时进行操作
  • 您在某个地方有\u\U,这会使下一个字符作为Unicode序列的一部分读取,因此repr(the_string)要做的是添加反斜杠以使之后的反斜杠无效(可能不是这个)
  • 您正在读取bytes对象,而不是str对象。尝试在r+b函数中使用open(读写,字节)打开它

我或多或少地将意大利面扔在了墙上,但我希望这会有所帮助!

相关问题