从大小为4GB python的文件中获取1行N行

时间:2013-09-07 08:31:57

标签: python python-2.7 file-io

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

,应该怎么做

1 个答案:

答案 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代码中。