Python TypeError:列表索引必须是整数,而不是unicode
我有一个utf-8编码的csv文件,希望使用csv.DictReader,而不是在链接中的UnicodeReader类中使用csv.Reader-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
我得到错误“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()}