我正在尝试从一个大文件(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
非常感谢您
答案 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)\/)'