我仍然对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])))
任何人都能指出我的方向吗?
答案 0 :(得分:1)
实际上,变量行的任何索引都存在空值或NULL。
您可以使用:
row[0] or ""
row[1] or ""
row[2] or ""
答案 1 :(得分:1)
根据评论,问题是由于一行没有要求打印的所有元素。
在python中,它常见且经常被鼓励使用try
和except
块进行错误处理。
例如,在您的情况下,以下内容可以帮助您找到有问题的行
import sys
...
try:
print(...,row[2])
except IndexError:
printf("Error: missing element(s) in row: ",row,file=sys.stderr)
# sys.exit(2) # if you want to exit program with error
答案 2 :(得分:0)
因此,当我将文件从主机操作系统复制到VMware时,它并没有复制文件中的所有数据。我错误地在主机操作系统中的文件中查找错误,而不是我复制到客户操作系统的文件。
所以答案是:我不得不再次将文件复制到来宾操作系统并检查所有数据是否存在。
感谢您的评论 - 让我找到答案!