我想从一个非常大的文件(大约4GB)加载前N行。 N本身可能很大。我试图将大文件拆分成块并逐个读取块。 N可以非常大,使得行数可以大于单个文件块。我写了这段代码。如果可以将行数加载到文件块
,这可以正常工作with open(self.outfile,'rb',self.chunk_size) as input_file
head=[input_file.next() for x in xrange(N)]
with open(self.rotatefile,'wb', self.chunk_size) as output_file:
output_file.writelines(head)
为了处理“N”的大值
,应该怎么做答案 0 :(得分:3)
您可以使用itertools.islice()
将可迭代限制为多个项目,包括将文件对象限制为多行。因为您正在阅读行,所以您应该以文本模式打开文件(删除b
):
from itertools import islice
with open('largefilename', 'r') as largefile:
for line in islice(largefile, N):
# Process the first N lines, one by one
output_file.write(line)
这允许您一次处理一行,但您只会处理第一行N
行。
如果你要做的就是将这些行复制到另一个文件,请执行:
with open('largefilename', 'r') as largefile:
output_file.writelines(islice(largefile, N))
file.writelines()
方法接受islice()
生成器,并且一次需要1000行,将它们作为块写入输出文件,所有这些都在C代码中。