我需要一次最多读取N行来读取一个大文件,直到EOF。在Python中最有效的方法是什么?就像是:
with open(filename, 'r') as infile: while not EOF: lines = [get next N lines] process(lines)
一种解决方案是列表理解和分片运算符:
with open(filename, 'r') as infile: lines = [line for line in infile][:N]
在这之后lines是行的元组。但是,这会将整个文件加载到内存中。如果您不希望这样做(即文件可能真的很大),则可以使用生成器表达式和isliceitertools包中的另一种解决方案:
lines
islice
from itertools import islice with open(filename, 'r') as infile: lines_gen = islice(infile, N)
lines_gen 是一个生成器对象,它为您提供文件的每一行,并且可以在这样的循环中使用:
lines_gen
for line in lines_gen: print line
两种解决方案都最多提供N行(如果文件没有那么多,则更少)。