Tldr:打開兩個 txt 檔案,使用一個搜索另一個,然后列印任何重復項。
大家好,第一次在這里發帖,對編碼和 python 非常陌生,我正在尋找答案,但找不到任何使用 .txt 檔案的東西,就像我正在嘗試做的那樣。我正在嘗試使用檔案 test.txt 在 test2 中搜索一組字串或單個字串。我使用 txt 檔案的原因是我不可能將每個值手動輸入到 python 中的串列中,因為檔案有數千個不同的字串可供搜索。
from itertools import chain
f1 = open(r"test.txt", "r")
f2 = open(r"test2.txt", "r")
file1 = f1.read().splitlines()
file2 = f2.read().splitlines()
x = [file1]
y = [file2]
z = list(chain([x,y]))
z.sort()
d = (x for x in z if z.count (x) > 1)
print (d)
f1.close()
f2.close()
我得到的結果是這樣的:
<generator object <genexpr> at 0x7f10cc992420>
我知道我應該列印從我用 list(chain()) 創建的組合串列中找到的任何重復項。任何幫助或建議將不勝感激!
uj5u.com熱心網友回復:
擴展我的評論。似乎您只是在希望事情能夠正常作業的東西周圍隨意折騰方括號,但在每種情況下您都使用方括號,您不應該這樣做。
.splitlines()已經回傳一個串列。您不必接受該回報并將其放入另一個串列中。
.chain()將兩個串列作為引數,因此將您的兩個串列粘貼在另一個串列中并將其作為單個引數傳遞不會達到您想要的效果。
通過一些基本的除錯,這些都是很容易發現的錯誤。例如,如果您print(x)在設定該變數后拋出 a ,您會發現它是 prints [['stuff','from','file','1']]。與 相同y [['stuff','from','file','2']]。您在另一個串列中有一個串列。
您也可以對傳入的引數執行此操作chain()。print([x,y])將顯示[[['stuff','from','file','1']],[['stuff','from','file','2']]]串列接收。
最后,您可能想要使用方括號的一個地方是在您的串列理解中。而不是括號,切換到方括號。
反而:
from itertools import chain
f1 = open(r"test.txt", "r")
f2 = open(r"test2.txt", "r")
file1 = f1.read().splitlines()
file2 = f2.read().splitlines()
z = list(chain(file1,file2))
z.sort()
d = [x for x in z if z.count (x) > 1]
print (d)
f1.close()
f2.close()
這將吐出['match','match'](假設兩個檔案中匹配的一個單詞是單詞'match')。
uj5u.com熱心網友回復:
要洗掉重復項,您可以使用set
f1 = open(r"test.txt", "r")
f2 = open(r"test2.txt", "r")
file1 = f1.read().splitlines()
file2 = f2.read().splitlines()
d = list(set(file1 file2)) # Combine and remove duplcates
print(d)
f1.close()
f2.close()
注意:(x for x in z if z.count (x) > 1)您正在這里創建一個生成器,您可能正在尋找看起來像這樣的串列理解
[x for x in z if z.count (x) > 1].
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/518389.html
標籤:Python列表文本重复
上一篇:如何隨機生成和測驗一個整數在串列中是否唯一,如果不是則重復
下一篇:查找字串中的所有串列元素
