我有这样的代码:
#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))
prints
[1, 2]
[4, 5]
[7, 8]
[]
切片总是从我们上次停止的地方开始。
让代码正常工作的最简单方法是使用f.readlines()
获取文件中行的列表,然后使用普通的 Python 列表切片[i:j]
。如果你真的想使用islice()
,您可以每次使用从头开始读取文件f.seek(0)
,但这会非常低效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)