私は、使用したいデータセットでいくつかの前処理/トークン処理を行うPythonモジュールを持っています。データセットは144M行のテキストファイルで、メモリに読み込んで分割し、シャッフルしてから新しいファイルに書き出します。以前は、書き込みは次の関数によって行われた:非常に大きなファイルを書き込むIOError
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]
に一致する文字のみがファイル内にあることを保証するフィルタリングサービスが実行されます。
私はPython2.7をAnaconda環境で実行しています。私が使っているコードのいくつかは、私が試したことがあってもPython3で動作しない複雑な文字列処理ロジックを実行するオープンソースプロジェクトから来ているので、Python3への切り替えはオプションではありません。
このエラーの原因となる大きなデータセットはありますか?私は間違っている可能性があるのはメモリエラーだと思っていただろうが、Errno 22
はメモリとは関係がないようだ。
シャッフルする前にフィルタステップを個別に実行できますか? –
万が一OSXをお使いですか?あなたがいる場合は、これを見てください[関連する質問](http://stackoverflow.com/questions/11662960/ioerror-errno-22-invalid-argument-when-reading-writing-large-bytestring) – Jakub
@Jakubはい私iMacでコードを実行しています。 – jbird