我的文本文件包含以下格式的n
行文字:
line_1
line_2
line_3
.
.
.
line_n_minus_1
line_n
我希望提取每一对连续的行(即line_1
和line_2
,line_2
和line_3
,依此类推,直到line_n_minus_1
和{ {1}}),对每个提取的对执行某些操作,并在line_n
和line_n_minus_1
之前继续执行此操作。我如何有效地为大文件做这件事?
这就是我的想法:
line_n
但是,我讨厌依赖from itertools import tee, izip
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
with open("file.txt","r") as f:
list_of_lines = f.readlines()
for i in pairwise(list_of_lines):
# do something with the pair tuple i
,因为我可能会使用大文本文件。有没有更好的方法呢?
答案 0 :(得分:1)
创建一个生成器,而不是使用readlines
,而不必将整个文件加载到内存中:
.
.
.
with open('a.txt') as f:
list_of_lines = (line for line in f)
.
.
.