如果我正确理解你的问题,你遇到的问题是将所有文本行存储在列表中,然后采用切片会占用太多内存.你想要的是逐行读取文件,而忽略除一定行之外的所有行(例如,行[17,34]).
尝试使用枚举来跟踪迭代文件时您所在的行号.这是一种基于生成器的方法,它使用yield一次只输出一个有趣的行:
def read_only_lines(f, start, finish):
for ii,line in enumerate(f):
if ii>=start and ii
yield line
elif ii>=finish:
return
f = open("big text file.txt", "r")
for line in read_only_lines(f, 17, 34):
print line
这个read_only_lines函数基本上从标准库中重新实现了itertools.islice,因此您可以使用它来实现更紧凑的实现:
from itertools import islice
for line in islice(f, 17, 34):
print line
如果要捕获列表而不是生成器中感兴趣的行,只需使用列表转换它们:
from itertools import islice
lines_of_interest = list( islice(f, 17, 34) )
do_something_awesome( lines_of_interest )
do_something_else( lines_of_interest )