在python中,将大文件拆分为小文件会引发内存错误

2024-09-30 07:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个非常大的文本文件(~8Gb)拆分成每个1Gb的小文件。但是当我试图使用zip峎longest获取块时,它会抛出内存错误。错误如下:

Traceback (most recent call last):
File "splitFile.py", line 125, in <module>
    splitFileIntoChunk(lineNumFileChunk, baseDirectoryPath, inputFile);
File "splitFile.py", line 63, in splitFileIntoChunk
    for i, g in enumerate(group):
MemoryError

同样的代码对于800Mb的文件非常适用。在

另外,8Gb文件成功地转换成大小为512Mb的文件块。但在创建1Gb大小的文件块时显示错误。在

这是否与python编译器的RAM最大分配有关。如果是这样的话,我们该如何改变呢?在

我的系统有16gb的内存和i7处理器。内存也没有完全消耗,因为我已经通过资源监视器检查过了,它使用了大约2-4GB的RAM。在

以下是参考代码:

^{pr2}$

然后:

def  splitFileIntoChunk(lineCountChunkSize, absoluteFilePath, inputFileName):

    _fileName, _fileExtention = os.path.splitext(inputFileName);

    if not os.path.exists(absoluteFilePath + outputDirectory):
        os.makedirs(absoluteFilePath + outputDirectory)

    with open(absoluteFilePath + inputFileName) as inputFileObject:
        group = grouper(lineCountChunkSize, inputFileObject, fillvalue=None);
        for i, g in enumerate(group):
            with tempfile.NamedTemporaryFile('w', delete=False) as fout:
                for j, line in enumerate(g, 1):  # count number of lines in group
                    if line is None:
                        j -= 1  # don't count this line
                        break
                    fout.write(line)
            os.rename(fout.name, (absoluteFilePath + outputDirectory + _fileName + '_{0}' + _fileExtention).format(i))

有关代码的更多参考信息,请参阅:Splitting large text file into smaller text files by line numbers using Python

版本:Python 3.4
操作系统:Windows 7
体系结构:64位


Tags: 文件内存代码inforos错误line

热门问题