pythonでテキストファイルの分割をしたい
python3.x系です。
以下のようなテキストファイル(original.txt)があります。タブ区切りです。
original.txt
aaa data1_1 data1_2 data1_3
aaa data2_1 data2_2 data2_3
bbb data3_1 data3_2 data3_3
ccc data4_1 data4_2 data4_3
これを以下の3つのテキストファイルに分割したいのです。
div001.txt
aaa data1_1 data1_2 data1_3
aaa data2_1 data2_2 data2_3
div002.txt
bbb data3_1 data3_2 data3_3
div003.txt
ccc data4_1 data4_2 data4_3
・1列目のデータをキーワードにしてファイルを分割したい。
・1列目のデータ(=分割された後にできるファイル数)はこの例だと3つだが、何個であっても対応できるようにしたい
そこで、以下の部分までコードを考えました。
import re
with open("original.txt", "r") as fh_input:
query_key = "" #キーワード
list = [] #入力データの配列
saved_key = "tekitou" #初期キーワード
filenumber = 1 #ファイル番号用
filename = "" #ファイル名用
for line in fh_input:
line_m = re.sub('[\r\n]+$', '', line)#改行コードの除去
list = line_m.split('\t')#タブ区切りでリスト化
query_key = list[0]
if saved_key != query_key:
filenumber_padded = '{0:03d}'.format(filenumber)
filename = "div" + filenumber_padded + ".txt"
filenumber += 1
「何かのファイルハンドル」 = open(filename, "w")
#ここに「filename」への書き込み処理がはいる
saved_key = query_key
とここまで書いて、ファイルハンドルを動的に(=キーワードの種類数に合わせて自動的に)生成する方法を思いつかず、行き詰まりました。ファイルハンドルが動的に複数生成できれば、複数のファイルを開いて書き込むことができます。perlだと「ファイルハンドルとして未定義のスカラ変数が与えられたとき、ファイルハンドルを自動的に生成し変数に設定する」ということで、これを用いて動的に生成できるようです。しかし、pythonはどうも違うらしいのです。
そこで、ここから先どうしたらよいかお知恵を拝借したいのです。また、以上の方法だと、仮にファイルハンドルを動的に生成できたとしても、ファイルをいくつも同時に開きっぱなしにすることになる・・・かな。すると、original.txtが大きい場合、メモリに負担になりそうな気がします。この点もあわせてお知恵をお借りできればと思います。
よろしくおねがいします。