Python TypeError:列表索引必须是整数,而不是unicode

Python TypeError:列表索引必须是整数,而不是unicode,python,csv,unicode,Python,Csv,Unicode,我有一个utf-8编码的csv文件,希望使用csv.DictReader,而不是在链接中的UnicodeReader类中使用csv.Reader- 我得到错误“TypeError:列表索引必须是整数,而不是unicode”什么是TypeError? 异常类型错误: 当操作或函数应用于不适当类型的对象时引发。关联的值是一个字符串,提供有关类型不匹配的详细信息 演示: >>> l1 = ["value1", "value2", "value3"] >>> type

我有一个utf-8编码的csv文件,希望使用csv.DictReader,而不是在链接中的UnicodeReader类中使用csv.Reader-


我得到错误“TypeError:列表索引必须是整数,而不是unicode”

什么是TypeError?

异常类型错误: 当操作或函数应用于不适当类型的对象时引发。关联的值是一个字符串,提供有关类型不匹配的详细信息

演示:

>>> l1 = ["value1", "value2", "value3"]
>>> type(l1) 
<type 'list'>
>>> l1[2]   # Need index to access item from the list.
'value3'
>>> l1["value1"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
>>> 
l1=[“值1”、“值2”、“值3”] >>>类型(l1) >>>l1[2]#需要索引才能访问列表中的项。 “价值3” >>>l1[“值1”] 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:列表索引必须是整数,而不是str >>>
我的同事通过修改UnicodeReader类中的下一个方法解决了这个问题,由于UTF-8 BOM字符,出现了一些问题

def next(self):  
    d = self.reader.next()  
    return {unicode(k, "utf-8").strip(u'\ufeff'): unicode(v, "utf-8").strip(u'\ufeff') for k, v in d.items()}  

是的,只需在for循环中打印
line
,还可以打印行的类型,即
type(line)
。为什么不使用
DictReader()
而不是在此处创建新的读卡器?你现在得到的是列表,而不是字典。换句话说:你为什么要创建两个不同的阅读器?还有,这里的
file\u obj
是什么?您能给我们一个复制问题的代码的最小完整示例吗?您可以通过使用
utf-8-sig
编解码器在
UnicodeReader
中打开文件来修复它,而无需进行额外的剥离。它识别并删除
\ufeff
(如果存在)。示例:
def\uuuu init\uuuu(self,f,encoding=“utf-8-sig”):
@MarkTolonen:我根据您的建议修复了额外的剥离。非常感谢。
def next(self):  
    d = self.reader.next()  
    return {unicode(k, "utf-8").strip(u'\ufeff'): unicode(v, "utf-8").strip(u'\ufeff') for k, v in d.items()}