【发布时间】:2016-12-21 21:52:02
【问题描述】:
我有一个 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 不是一种选择(如果这甚至有帮助的话)。
有没有什么方法可以让更大的数据集导致这个错误?我原以为唯一可能出错的是内存错误,但Errno 22 似乎与内存没有任何关系。
【问题讨论】:
-
过滤步骤可以单独在shuffle之前完成吗?
-
你在 OSX 上吗?如果你是,看看这个related SO question
-
@Jakub 是的,我在 iMac 上运行代码。
-
@AlexReynolds 不,过滤是在一个单独的 Java 模块(以及许多其他逻辑)中完成的,该模块依赖于预先存在的 Java 类
标签: python python-2.7