循环文件行

时间:2015-10-02 11:32:20

标签: python list python-3.x for-loop file-io

我仍然对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 个答案:

答案 0 :(得分:1)

实际上,变量行的任何索引都存在空值或NULL。

您可以使用:

row[0] or ""
row[1] or ""
row[2] or ""

答案 1 :(得分:1)

根据评论,问题是由于一行没有要求打印的所有元素。

在python中,它常见且经常被鼓励使用tryexcept块进行错误处理。

例如,在您的情况下,以下内容可以帮助您找到有问题的行

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时,它并没有复制文件中的所有数据。我错误地在主机操作系统中的文件中查找错误,而不是我复制到客户操作系统的文件。

所以答案是:我不得不再次将文件复制到来宾操作系统并检查所有数据是否存在。

感谢您的评论 - 让我找到答案!