我试图从第 3 行开始读取一些文件,但是不行。
我尝试使用readlines()+ 行的索引号,如下所示:
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()
重要提示:因为这是一个新功能并且我的所有代码都已使用next(f),所以解决方案需要能够使用它。
next(f)
试试这个(使用itertools.islice):
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:
urls.txt
1 2 3 4 5
输出:
3 4 5 End of file!
此解决方案优于此解决方案readlines,因为它不会将整个文件加载到内存中,而仅在需要时加载部分文件。当可以这样做时,它也不会浪费时间迭代前几行islice,这使得它比@MadPhysicist 的答案快得多。
readlines
islice
另外,考虑使用with语法来保证文件被关闭:
with
with open('urls.txt', 'r+') as f: # do whatever