次のような2つの別々のファイルからテキストを取得しようとしています:
File 1:
000892834 13.663 0.098 0.871 0.093 0.745 4.611 4795
File 2:
892834 4916 75 37 4857 130 128 4795 4.61 -0.09 0 0
次のような出力を取得します。
892834 13.663 0.098 0.871 0.093 0.745 4.611 4795
892834 4916 4795 -0.09
解決策に近いと思われるコードがいくつかあります。
filter_func_1 = lambda x: x >= 15
filter_func_2 = lambda x: (5777 + 100) > x > (5777 - 100)
mergedData = defaultdict(list)
with open('Table1_Karoff.txt') as file_1, open('Table7_Pinsonneault.txt') as file_2, open('Processed_Data.txt', 'w') as outfile:
for line_1 in file_1:
splt_file_1 = line_1.split()
if filter_func_1(splt_file_1[1]):
mergedData[splt_file_1[0].lstrip('0')].append(line_1)
for line_2 in file_2:
splt_file_2 = line_2.split()
Data = map(itemgetter(0, 1, 8, 9), line_2)
if filter_func_2(splt_file_2[1]):
mergedData[splt_file_2[0]].append([' '.join(map(str, i)) for i in Data])
for k in mergedData:
if len(mergedData[k]) == 2:
outfile.write("\n".join(mergedData[k]) + "\n")
return outfile
このコードが「想定」しているのは、ラムダ演算子を使用して 2 種類のフィルターを作成し、各行の特定のインデックスをラムダ関数と比較して、それが true かどうかを確認し、そうであれば、その行全体をリストに追加して出力することです。 . また、ファイル 1 の最初の数字の先頭から '000' を取り除き、同じ最初の数字が両方のファイルに存在することを確認します。
私の問題は次のとおりです。
1) file_1 ID # (その最初の番号) からすべての 0 が正しく削除されていませんが、私の知る限り、コードはそれを行う必要があります。00892834 として出力されるため、最初の 0 のみが削除されます。
2) フィルターを追加した後、新しいファイルにデータがまったく書き込まれませんでした。line.split が新しいリストを適切に作成したかどうかを確認したところ、作成されていませんでした。つまり、フィルター処理するデータがありませんでした。 splt_file_# 入力にデータがなかったためです。これは私には奇妙で、どうしてそうなるのか理解できません。最後に、splt_file_1 および splt_file_2 リストを書き出すはずの writeline を追加して、リストの作成をテストしましたが、何も吐き出されませんでした。
3) 必要な値はファイル 2 のリストで順番に呼び出すことができないため (インデックス 0、1、8、9 のみが必要です)、データをマップしてからフォーマットしようとしましたが、これによりインデックスが範囲外の問題になります。上記の#2の問題のために理解できます。
これらのエラーを削除するための助けが必要です。コードが間違っているのか、何か不足しているだけなのかわかりません。助けてくれてありがとう。