行数を変数としてテキストファイルを分割しています。この関数は、吐き出されたファイルを一時ディレクトリに保存するために作成しました。各ファイルには400万行あり、最後のファイルが必要です。
import tempfile
from itertools import groupby, count
temp_dir = tempfile.mkdtemp()
def tempfile_split(filename, temp_dir, chunk=4000000):
with open(filename, 'r') as datafile:
groups = groupby(datafile, key=lambda k, line=count(): next(line) // chunk)
for k, group in groups:
output_name = os.path.normpath(os.path.join(temp_dir + os.sep, "tempfile_%s.tmp" % k))
for line in group:
with open(output_name, 'a') as outfile:
outfile.write(line)
主な問題は、この関数の速度です。800万行の1つのファイルを400万行の2つのファイルに分割するための時間は、私のWindowsOSとPython2.7の30分以上です。