我試圖通過打開兩個 txt 檔案來讀取兩個檔案,然后我想查找是否有任何行匹配(它們不需要按正確的順序排列)。
例如:
txt檔案1:
1
2
8
4
3
9
txt檔案2:
2
0
10
9
8
所以 2、9 和 8 在這里是匹配的。
下面是我到目前為止嘗試過的代碼,但這并沒有輸出目前在兩個 txt 檔案中的結果。它目前沒有輸出任何東西,這表明它只是沿著這else條路走下去。
with open('file1.txt') as file1, open('file2.txt') as file2:
for domain in file2:
for domain_2 in file1:
if domain == domain_2:
print(domain "Match found")
else:
continue
uj5u.com熱心網友回復:
最簡單的方法是將這些數字串列轉換為集合,然后取它們的交集。這就是set()天生要做的:-)。
假設您已經可以將檔案內容讀入串列,則解決方案變為:
file1_data = ["2", "8", "4", "3", "9"]
file2_data = ["2", "0", "10", "9", "8"]
print(list(set(file1_data).intersection(file2_data)))
給我們:
['2', '8', '9']
如果您想根據類似于您現在擁有的策略執行更手動的方法,我會:
file1_data = ["2", "8", "4", "3", "9"]
file2_data = ["2", "0", "10", "9", "8"]
results = []
for value_1 in file1_data:
if value_1 in file2_data:
results.append(value_1)
print(results)
或者您可以使用串列推導:
results = [value_1 for value_1 in file1_data if value_1 in file2_data]
print(results)
最后兩個版本中的關鍵部分是測驗當前值(value_1)是否在您的第二個串列中,通過:
value_1 in file2_data
如果部分問題與無法從 中“重新讀取”??有關file1,那是因為在您file1通過其生成器到達末尾之后,您必須重新讀取它才能回到開頭。
出于這個原因,我建議將檔案中的資料讀取到沒有此生成器限制的串列中。
with open("file1.txt", "r") as file1:
file1_data = [n.strip() for n in file1]
with open("file2.txt", "r") as file2:
file2_data = [n.strip() for n in file2]
雖然我不喜歡它,但您也可以這樣做非常接近您當前的解決方案:
with open('file1.txt') as file1:
with open('file2.txt') as file2:
for domain_2 in file2:
file1.seek(0)
for domain_1 in file1:
if domain_1.strip() == domain_2.strip():
print(f"Match Found: {domain_1.strip()}")
else:
continue
這給了我們:
Match Found: 2
Match Found: 9
Match Found: 8
請注意,與您當前解決方案的偏差主要是添加了 afile1.seek(0)以將 file1 重置回起點,以及各種包含.strip()以擺脫原始資料中的回車符。還要注意,在else: continue技術上是多余的,可以省略。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/406294.html
標籤:
