如何进入enumarate()循环不止一次

时间:2018-05-03 10:00:18

标签: python loops csv enumerate read-data

我想用100读取大数据文件100但是我的脚本只读取前100行,然后它永远不会进入" for循环"对于其余的。 更清楚的是,最后,我只得到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

1 个答案:

答案 0 :(得分:0)

基本上,文件对象不是列表,但是当调用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 = []

另请参阅:

但是,鉴于您可能有CSV文件,您可能需要尝试以下操作: