如何多次进入 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 文件,您可能想尝试以下操作:
我想读取一个 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 文件,您可能想尝试以下操作: