0

我想从一个非常大的文件(大约 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”的大值应该做什么

4

1 回答 1

3

您可以使用itertools.islice()将可迭代对象限制为多个项目,包括将文件对象限制为多行。因为您正在阅读lines,所以您应该以文本模式打开文件(删除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 代码。

于 2013-09-07T08:40:06.470 回答