gpt4 book ai didi

Python:itertools.islice 不在循环中工作

转载 作者:行者123 更新时间:2023-11-28 22:05:35 24 4
gpt4 key购买 nike

我有这样的代码:

#opened file f
goto_line = num_lines #Total number of lines
while not found:
line_str = next(itertools.islice(f, goto_line - 1, goto_line))
goto_line = goto_line/2
#checks for data, sets found to True if needed

line_str 在第一遍中是正确的,但之后的每遍都会读取不同的行。

例如,goto_line 从 1000 开始。它可以很好地读取第 1000 行。然后下一个循环,goto_line 是 500,但它不读取第 500 行。它读取一些接近 1000 的行。

我正在尝试读取大文件中的特定行,而不读取超出必要的内容。有时它向后跳到一行,有时向前跳。

我确实尝试过 linecache,但我通常不会在同一个文件上多次运行此代码。

最佳答案

Python 迭代器只能使用一次。通过示例最容易看出这一点。代码如下

from itertools import islice
a = range(10)
i = iter(a)
print list(islice(i, 1, 3))
print list(islice(i, 1, 3))
print list(islice(i, 1, 3))
print list(islice(i, 1, 3))

打印

[1, 2]
[4, 5]
[7, 8]
[]

切片总是从我们上次停止的地方开始。

使代码正常工作的最简单方法是使用 f.readlines() 获取文件中的行列表,然后使用普通的 Python 列表切片 [i: j]。如果你确实想使用islice(),你可以使用f.seek(0)每次从头开始读取文件,但这会非常低效.

关于Python:itertools.islice 不在循环中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5020444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com