IOError写入非常大的文件

时间:2016-12-21 21:52:03

标签: python python-2.7

我有一个python模块,负责对我想要使用的数据集进行一些预处理/标记。数据集是一个144M的行文本文件,我读入内存,分成不同的部分,随机播放,然后写入新文件。以前,写作是通过以下功能完成的:

def write_lines(filename, lines):
with io.open(filename, 'w', encoding='utf-8') as fout:
    fout.write('\n'.join(lines))

尝试在144M行数据集上执行此操作时,出现IOError: [Errno 22]错误。但是,在6M行数据集上运行完全相同的代码没有问题。在将数据集发送到此模块之前,它会运行一个过滤服务,确保只有与模式[\x00-\x7f]匹配的字符在文件中,如this post中所述。

我在Anaconda环境中运行python2.7。我使用的一些代码来自一个开源项目,它执行一些复杂的字符串处理逻辑,无论我尝试过什么都不能在Python3上运行,因此切换到Python3不是一个选项(如果这甚至会有帮助的话)。 / p>

有没有更大的数据集可能导致此错误?我原本以为唯一可能出错的是内存错误,但Errno 22似乎与内存无关。

1 个答案:

答案 0 :(得分:2)

您不需要在一条大线上加入您的线路。你可能会得到一条太长的线。试试这个:

def write_lines(filename, lines):
    with io.open(filename, 'w', encoding='utf-8') as fout:
        for line in lines:
            fout.write(line + '\n')

仔细阅读question