お世話になっております。
Pythonを使って、以下のような処理をしたいと考えています。
- 読み込ませているファイル形式
['ファイル名','条件','詳細(succeed, failなど)']
- やりたいこと
①'条件'==1のとき、ファイル名を抜き出してリストに追加(remove_list)
②詳細が'succeed'かつ①のリストにファイル名が含まれていないものだけをファイルに書き出し
ファイル名が重複しているのですが、1つでも'条件'==1のデータが存在するファイルは、
その他のデータが②を満たしていても除外したい…という意味合いです。
【例】
['file1',1,'succeed']
['file1',0,'succeed']
['file1',0,'fail']
['file2',0,'succeed']
['file2',0,'fail']
この場合は['file2',0,'succeed']だけを取り出したいと考えています。
- 試してみたコード
Python
1in_file = ('filename', 'r') 2out_file_1 = ('filename', 'w') 3out_file_2 = ('filename', 'w') 4 5remove_list = [] 6 7for read1 in in_file: 8 if read1[1]==1: 9 remove_list.append(read1[0]) 10 else: 11 pass 12 13for read2 in in_file: 14 if not (read2[2]=='fail' or (read2[0] in remove_list)): 15 out_file_1.write(read2) 16 else: 17 out_file_2.write(read2) 18 19out_file_1.close() 20out_file_2.close() 21in_file.close()
- 問題点
・この書き方だと、1つ目のfor構文まではうまくいき、remove_listの作成はできるのですが、2つ目が処理されません。
Jupyter notebookで、1つ目のfor構文だけを流した後に、2つ目を単独で流すと、正常にファイルを処理することができます。
これを1つのPythonスクリプトにするには、どのように記載したら良いでしょうか?
・読み込ませるファイルサイズが大きく(13GB)、処理に時間がかかってしまうため、もっと簡潔に記載できないかと悩んでいます。
ご意見いただけたら嬉しいです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー