【发布时间】:2015-10-02 11:32:20
【问题描述】:
我对 Python 还是很陌生,只是不明白这里出了什么问题。
我在从 CSV 文件读取行的中间得到一个 IndexError: list index out of range。该文件有约 135k 行数据。在代码处理完第 38.715 行后,我收到上述带有 print 函数的代码行的错误。我不明白是什么原因造成的,因为在那之前的任何行都没有问题,并且数据的结构或类型没有改变。我在 VMware btw 中运行 Ubuntu 14.04(64 位)。
注意:str(int(row[2])) 只是为了删除前面的 0,以便之后我可以将该字符串与另一个字符串进行比较。
这是我的代码:
import csv
with open('/home/joakim/Desktop/SomeFile.csv', 'r') as f_id:
f_reader = csv.reader(f_id, delimiter=';')
for row in f_reader:
print ('C.id:', row[0], 'PR.id:', row[1], 'Id:', str(int(row[2])))
谁能指出我的方向?
【问题讨论】:
-
我猜有些行格式错误 - 没有 3 个 csv 列,因此当您尝试访问第三列时会引发异常。你能验证
row对象在引发异常时在迭代中的外观吗? -
我检查了正在读取的文件中的第 38.715 行和第 38.716 行,数据格式相同,分隔符相同。此外,我刚刚从 XLSX 文件中导出了 CSV 文件,所以我看不到数据是如何出现格式错误的。不过,我会尝试在进行其他打印之前打印整个行对象。
-
尝试添加
print(len(row))以确认这一点。 -
@MartinEvans 或
if len(row) < 3: print row -
@Łukasz R. Lol,我是个白痴! :P 感谢您的回答,我刚刚找到了罪魁祸首。显然,当我将文件从主机操作系统复制到 VMware 时,它并没有复制文件中的所有数据。我正在查看位于主机操作系统中的文件是否有错误:P 非常感谢!
标签: python list python-3.x for-loop file-io