IndexError,为什么从if语句求值时列表似乎为空?

时间:2018-12-12 22:10:23

标签: python bigdata

我正在尝试从一个大文件(1GB)中读取数据,并试图在这样做时降低内存使用量。 这是我的代码:

with open('abitmorelinesdec.dat') as data_f:
    i=0
    line=[]
    for lines in data_f:
        i=i+1
        line = np.array(list(filter(None,lines.strip().split(' ')))[4:],dtype=int)
        if line[4] == 0:
            print('ok')

它确实输出以下内容:

if line[4] == 0:

IndexError: index 4 is out of bounds for axis 0 with size 0

如果我改运行它:

with open('abitmorelinesdec.dat') as data_f:
    i=0
    line=[]
    for lines in data_f:
        i=i+1
        line = np.array(list(filter(None,lines.strip().split(' ')))[4:],dtype=int)
    if i==100:
        print(line) 
        print(len(line))

Spyder确实输出:

[3459 3458 3457 ... 3464 3460 3464]
1024

这表明python在if语句被声明之前“正确地”正确地将line视为具有1024个元素的列表。 我在这里想念什么?

您可以在这里找到文件的一部分:https://pastebin.com/FPFWAsxP

非常感谢您

2 个答案:

答案 0 :(得分:1)

让我们看看您的行读取代码对您所读取的行有何作用:

>>> line = np.array(list(filter(None,"0 1 2 3 4 5 6 7 8 9 10".strip().split(' ')))[4:],dtype=int)
>>> line[4]
8

是的,它可以正常工作。结论:您的输入文件有一些空行或短行。为什么不循环打印每行的长度,您会自己看到。

with open('abitmorelinesdec.dat') as data_f:
    for inpline in data_f:
        print(len(np.array(list(filter(None,inpline.strip().split(' ')))[4:],dtype=int)))

答案 1 :(得分:1)

不是答案。但这是编写可能指出问题所在的代码的最简单方法。它会为您提供更多有关违规行的信息。

 'node_modules\/(?!(ol)\/)'