我想從兩個獨立的文件,如採取文字:Python的文本文件操作
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
一下這個代碼是「應該」做的就是創建兩種過濾我們在lambda操作符中,將每行中的某個索引與lambda函數進行比較,看看它是否爲true,如果是,則將整行附加到列表中以便輸出。它還從文件1中的第一個數字的開頭剝離'000',並檢查以確保兩個文件中都存在相同的第一個數字。
我的問題是:
1)file_1編號(即第一個數字)不正確都在0的從中剝離,儘管據我所知,代碼應該這樣做。它輸出爲00892834,因此只刪除第一個0.
2)添加過濾器後,根本沒有數據會寫入新文件,並且當我檢查是否已正確創建line.split時一個新的列表,它沒有,這意味着沒有數據要過濾,因爲splt_file_#輸入中沒有數據。這對我來說很奇怪,我不明白這是怎麼可能發生的。我通過在最後添加一個應該寫出splt_file_1和splt_file_2列表的writeline來測試列表創建,但是它沒有吐出任何東西。 3)由於我需要的值不能在列表中從文件2中按順序調用(我只需要索引0,1,8,9),我試圖映射然後格式化數據,但是這會給出一個索引範圍問題,這是可以理解的,因爲我在上面#2中的問題。
我需要任何幫助,我可以在刪除這些錯誤,我不知道我的代碼是錯誤的,或者如果我只是失去了一些東西,謝謝任何幫助。
你能在上面的代碼中修復你的縮進嗎? –
@MichaelPratt當然!對不起,我沒有注意到 – ImmortalxR
輸入文件中是否有多行?如果是這樣,你是否介意在讀取這兩個文件後將它們讀入內存中以進行內存匹配?你對這些輸入行的順序有什麼限制嗎? – Gijs