【发布时间】:2015-04-17 08:41:30
【问题描述】:
我有一个 utf-8 编码的 csv 文件,我想在链接中的 UnicodeReader 类中使用 csv.DictReader 而不是使用 csv.Reader - https://docs.python.org/2/library/csv.html
class UTF8Recoder:
def __init__(self, f, encoding):
self.reader = codecs.getreader(encoding)(f)
def __iter__(self):
return self
def next(self):
return self.reader.next().encode("utf-8")
class UnicodeReader:
def __init__(self, f, encoding="utf-8"):
f = UTF8Recoder(f, encoding)
self.reader = csv.DictReader(f, delimiter=b',')
def next(self):
row = self.reader.next()
return [unicode(s, "utf-8") for s in row]
def __iter__(self):
return self
def csv_dict_reader(file_obj):
reader = UnicodeReader(file_obj)
for line in reader:
val = line [“first_column”]
if __name__ == "__main__":
try:
with open(“abcd.csv") as f_obj:
csv_dict_reader(f_obj)
except IOError:
print "Error: can\'t find file - tz_2k3.csv or read data"
raise SystemExit
我收到错误“TypeError:列表索引必须是整数,而不是 unicode”
【问题讨论】:
-
是的,只需在 for 循环中打印
line并打印行类型,即type(line)。 -
为什么不使用
DictReader()而不是在这里创建一个new 阅读器?您现在得到的是列表,而不是字典。 -
换句话说:你为什么要创建两个不同的阅读器?
-
另外,这里的
file_obj是什么?您能给我们一个您的代码的最小、完整示例来重现问题吗?