with open("...txt") as fp:
for i, line in enumerate(fp):
if some condition :
i=0
fp.seek(0)
文本很大,GB数据因此我使用枚举。我需要处理这个巨大的文件数千次,所以我决定在第一时间打开它以提高效率。但是,尽管此代码有效,但i
不会变为0,它只会继续递增。我需要它为零,因为我需要行i
的位置。并且每次数十亿*数千倍并且进行一些模运算是低效的。
所以我的问题是当我回到文件的开头时,如何将i
设置为零?在此先感谢(我使用python 3.6)
答案 0 :(得分:3)
你可以总是制作你自己的可重置枚举器,但可能有更好的方法去做你真正想做的事。
仍然,这是一个可重置的枚举器的样子:
def reset_enumerate(thing, start=0):
x = start
for t in thing:
val = yield t, x
if val is not None:
x = val
else:
x += 1
然后你会像这样使用它:
r = reset_enumerate(range(10))
for i, num in r:
print('i:', i, 'num:', num)
if i == 5:
i, num = r.send(0)
print('i:', i, 'num:', num)
答案 1 :(得分:1)
以下是如何模拟像您这样的场景的示例:
假设我有一个名为input.txt
的文件,其中包含以下数据:
1
2
3
代码:
j = 0
with open('input.txt', 'r') as f:
for k in f:
# A break condition
# If not we'll face an infinite loop
if j > 4:
break
if k.strip() == '2':
f.seek(0)
print("Return to position 0")
# Don't forget to increment j
# Otherwise, we'll end up with an infinite loop
j += 1
print(k.strip())
将输出:
1
Return to position 0
2
1
Return to position 0
2
1
Return to position 0
2
1
Return to position 0
2
1
Return to position 0
2
答案 2 :(得分:1)