小能豆

如何在 python 中使用 read next() 从任意行开始?

py

我试图从第 3 行开始读取一些文件,但是不行。

我尝试使用readlines()+ 行的索引号,如下所示:

x = 2
f = open('urls.txt', "r+").readlines( )[x]
line = next(f)
print(line)

但我得到了这个结果:

Traceback (most recent call last):
  File "test.py", line 441, in <module>
    line = next(f)
TypeError: 'str' object is not an iterator

我希望能够将任意一行设置为变量,然后从那里,我每次使用next()它都会转到下一行。

重要提示:因为这是一个新功能并且我的所有代码都已使用next(f),所以解决方案需要能够使用它。


阅读 10

收藏
2025-01-11

共1个答案

小能豆

试试这个(使用itertools.islice):

from itertools import islice

f = open('urls.txt', 'r+')
start_at = 3
file_iterator = islice(f, start_at - 1, None)

# to demonstrate
while True:
    try:
        print(next(file_iterator), end='')
    except StopIteration:
        print('End of file!')
        break

f.close()

urls.txt

1
2
3
4
5

输出:

3
4
5
End of file!

此解决方案优于此解决方案readlines,因为它不会将整个文件加载到内存中,而仅在需要时加载部分文件。当可以这样做时,它也不会浪费时间迭代前几行islice,这使得它比@MadPhysicist 的答案快得多。

另外,考虑使用with语法来保证文件被关闭:

with open('urls.txt', 'r+') as f:
    # do whatever
2025-01-11