2016-06-23 5 views
0

私は75,151行を含むファイルを読みました。 50,000行ごとに分割したい。 私は2つのファイルを作りました.1つのファイルは50,000の行を持ち、もう1つのファイルは25,151の行を持っています。 (:50,000 INSERT_NUMBER)ごとに50,000行を分割し、新しいファイルを作るためのより良い方法があるが50,000行ごとに分割され、Pythonでファイルが書き込まれます

for index, data in enumerate(lines): 
    if ((index % INSERT_NUMBER) == 0 and index != 0) or (index == (lines- 1)) : 
      made file .... 

は、私はこの のようなコードを作ったのですか?

+3

['split'](http://linux.die.net/man/1/split)を使用してください。 'split -lines = 50000 really_big_file.txt' – MattDMo

+0

@MattDMoはPythonでも可能ですか? – Bethlee

+0

確かに 'os.system(" split -lines = 50000 filename.txt ")' – MattDMo

答えて

1

ここitertools.groupby()を使用して一つの方法です:

from itertools import groupby 

out_filename = '/tmp/f{}.txt' 
lines_per_file = 50000 

with open('infile.txt') as infile: 
    for file_number, lines in groupby(enumerate(infile), key=lambda x: x[0] // lines_per_file): 
     with open(out_filename.format(file_number), 'w') as outfile: 
      outfile.writelines(line for line_number, line in lines) 

だからここのトリックは、整数の除算を使用してチャンクにグループにそれを各行の行番号を使用するようにし、その後のカウンターとしてグループ化キーを使用することです出力ファイル名

あなたが既に持っているものより優れていますか?コードを読むのはもう少し複雑ですが、モジュロ演算を使用してグループ化しようとすると、厄介なエッジのケースに対処する必要はありません。

+0

ありがとうございます。私はそれを使用しようとします。 – Bethlee

関連する問題