4 回答

TA貢獻1797條經驗 獲得超6個贊
您的代碼有兩個問題,break第一次與 lineB 比較后將退出循環。另一個問題是當您讀取文件時,您使用設置在文件開頭的光標,一旦您讀取文件,光標就位于末尾,因此每次嘗試使用相同的光標時它都會為空再次處理而不重置光標。由于您似乎不關心重復項,因此我編寫了以下代碼,它應該可以完成您想要的操作:
with open("A.txt") as Af, open("B.txt") as Bf:
numsA = {int(lineA.strip()) for lineA in Af}
numsB = {int(lineB.strip()) for lineB in Bf}
print(numsA & numsB)

TA貢獻1752條經驗 獲得超4個贊
迭代 B 的內部循環不起作用,或者更準確地說,對于 A 的第一行,它只工作一次。之后,它已經在 B 的末尾。啊,是的,break
也是 - 將在第一次迭代后退出的內循環。你可能打算把它放在里面if
您可以在內部循環之前重新打開 B 。無論如何,這非常慢 - 盡管對于 1000 個數字仍然可以。最好將 A 的內容讀入集合,然后遍歷 B,尋找集合中存在的數字。
或者,如果您處于類 unix 環境中,只需cat A.txt B.txt| sort | uniq -d
假設您在 A 或 B 中沒有重復。如果您仍然可以在 shell 中執行此操作(sort A.txt| uniq; sort B.txt | uniq) | sort | uniq -d

TA貢獻1827條經驗 獲得超9個贊
您將不需要else. 將 break 移到條件內部,這樣它只會在找到匹配項時才中斷內部循環:
file_A=open("A.txt",mode="r")
file_B=open("B.txt",mode="r")
out=open("Spol.txt", mode="w+")
for lineA in A:
for lineB in B:
if lineA==lineB:
X+=(lineA)
break
A.close()
B.close()
out.write(X)
out.close()

TA貢獻1808條經驗 獲得超4個贊
假設每個文件中的每一行都是一個數字,您可以使用 python集合將所有行從第一個文件加載到一個集合,并將所有行從第二個文件加載到另一個集合,然后使用集合交集。例子:
# Reads into a set the content of file1 line by line
with open('file1.txt', 'r') as fs:
file1_set = set(fs.readlines())
# Reads into a set the content of file2 line by line
with open('file2.txt', 'r') as fs:
file2_set = set(fs.readlines())
# After both files contents (the numbers) are in sets
# then uses set intersection to find numbers appearing in both files
print(file1_set.intersection(file2_set))
最后一行將打印兩個文件中出現的所有數字
添加回答
舉報