如何多次进入 enumarate() 循环

How to enter into enumarate() loop more than one time

我想读取一个 100 x 100 的大数据文件。但是我的脚本只读取前 100 行,然后它永远不会进入 "for loop" 其余部分。 更清楚的是,最后,我只得到从 0 到 100 的行,但我还想要 100-200、200-300、300-400 等。我看不出问题是什么。

(我用的是python 3.4,.csv文件里的数据都是数字,我已经知道用islice(),但我特别想用enumerate()函数。)

如果你能帮上忙,我会很高兴。

pathInput = "input.csv"
f = open(pathInput, 'r')
sizeOfList = 100
iD = 0
while iD<1000:
    dataset = []
    for i, line in enumerate(f):
       if i<(iD + sizeOfList):
           dataset.append(line)
    print(dataset)
    iD += sizeOfWindow

基本上,文件对象不是一个列表,但它有一个游标,当调用 read 时,它会向文件末尾移动(enumerate 基本上是这样)。光标基本上放在文件的末尾,因此在第二个循环中无法再读取任何内容。

有两种解决方法:

1) 首先将整个文件读入内存,然后将enumerate调用转换成列表,例如:

pathInput = "input.csv"
f = open(pathInput, 'r')
idx_line = enumerate(f)
id = 0
while id < 1000:
    dataset = []
    for idx, line in items:
        ...

2) 在文件对象上调用 seek 以在调用 enumerate(f).

之前回到文件的开头
while id < 1000:
    f.seek(0)
    dataset = []

另请参阅:

  • Why can't I call read() twice on an open file?

但是,鉴于您可能有一个 CSV 文件,您可能想尝试以下操作: