(file1) 12 CA 1.00 49.66 -0.0125 12 C 1.00 57.90 0.1763 13 CA 1.00 57.10 0.4509 13 C 1.00 61.98 0.4591 14 CA 1.00 62.19 0.1501 14 C 1.00 63.58 0.1205
(file2) 1 CA 1.00 67.95 0.3678 1 C 1.00 67.95 0.1392 2 CA 1.00 236.11 0.2495 2 C 1.00 236.11 0.7734 3 CA 1.00 237.00 0.6279 3 C 1.00 237.00 0.1079
file1とfile2の5列目の大小を比較し、大きい方を出力するということをしたいです。
ただし、ある行で2列目がCAのときにfile1の方が大きくても、その行と1列目が同じ次の行でfile2の方が大きいならば、ある行でもfile2を出力するようにしたいです。
つまり、1列目が同じである2行をセットで比較したいです。
(file1) 12 CA 1.00 49.66 -0.0125 ←この 12 C 1.00 57.90 0.1763 ←2行と 13 CA 1.00 57.10 0.4509 13 C 1.00 61.98 0.4591 14 CA 1.00 62.19 0.1501 14 C 1.00 63.58 0.1205
(file2) 1 CA 1.00 67.95 0.3678 ←この 1 C 1.00 67.95 0.1392 ←2行をセットとして比較 2 CA 1.00 236.11 0.2495 2 C 1.00 236.11 0.7734 3 CA 1.00 237.00 0.1279 3 C 1.00 237.00 0.1079
(得たい結果) 1 CA 1.00 67.95 0.3678 # file1 < file2 1 C 1.00 67.95 0.1392 # file1 > file2だが、前の行の結果からfile2を出力 2 CA 1.00 236.11 0.2495 # file1 > file2だが、次の行の結果からfile2を出力 2 C 1.00 236.11 0.7734 # file1 < file2 14 CA 1.00 62.19 0.1501 # file1 > file2 → file1を出力 14 C 1.00 63.58 0.1205 # file1 > file2 → file1を出力
そこで、以下のようなスクリプトを書きました。
python
1path = 'file1' 2path2 = 'file2' 3 4f = open(path) 5f2 = open(path2) 6list = f.readlines() 7list2 = f2.readlines() 8f.close() 9f2.close() 10 11for (line,line2) in zip(list,list2): 12 line1_1 = line[23:30] 13 line2_1 = line2[23:30] 14 line1_2 = float(line1_1) 15 line2_2 = float(line2_1) 16 line1_3 = line[6:8] 17 line2_3 = line2[6:8] 18 if line1_3 == "CA" and line2_3 == "CA" and (line1_2 < line2_2): 19 fileobj = open("sequence_line.log","a") 20 fileobj.write(line2) 21 elif line1_3 == "CA" and line2_3 == "CA" and (line1_2 >= line2_2): 22 if line1_3 == "C " and line2_3 == "C " and line1_2 < line2_2: 23 fileobj = open("sequence_line.log","a") 24 fileobj.write(line2) 25 else: 26 fileobj = open("sequence_line.log","a") 27 fileobj.write(line1) 28# ここまでで、CAの行がfile1 < file2 → file2を出力 29# CAの行がfile1 > file2 かつ その次のCの行がfile1 < file2 → file2の行を出力 はOK 30 elif line1_3 == "C " and line2_3 == "C " and (line1_2 < line2_2): 31 fileobj = open("sequence_line.log","a") 32 fileobj.write(line2) 33 elif line1_3 == "C " and line2_3 == "C " and (line1_2 >= line2_2): 34 if line1_3 == "CA" and line2_3 == "CA" and (line1_2 < line2_2): 35 fileobj = open("sequence_line.log","a") 36 fileobj.write(line2) 37 else: 38 fileobj = open("sequence_line.log","a") 39 fileobj.write(line1) 40# Cの行がfile1 < file2 → file2を出力 はOK 41## Cの行がfile1 > file2 かつ その前のCAの行がfile1 < file2 → file2の行を出力ができない。。。 42 43
説明するのが難しく、理解しづらいかもしれませんが、要は2行セットで比較したいです。
何かうまいやり方をご存知でしたらお願いします。
要するに、①2行を一括して比較する。②第1行目と第二行目どちらもfile1 > file2ならfile1、③そうでなければfile2を出力、というルールでしょうか?
その通りです。書き方が悪くてすみません。
回答1件
あなたの回答
tips
プレビュー