慕運維8079593
2023-10-11 15:48:37
我需要在 python 中掃描 2 個文件,并說出 file1 中的哪些單詞也在 file2 中。我制作了一個包含 file2 中所有單詞的列表,然后掃描 file1 中的行是否在列表中。所以這工作得很好,但是大文件(比如 500k)可能需要 1 小時以上,我想知道是否有更快的方法提前致謝(defined var etc and files)a = []for line in var: a += [line]teller = 0for line1 in new_file: if line1 not in a: print(line1, file=filter, end='') else: teller += 1 print(line1, file=bad, end='' )print('There were', teller, 'lines that were in the old file.')
3 回答

aluckdog
TA貢獻1847條經(jīng)驗 獲得超7個贊
更快的替代方法是使用集合(只要您可以將兩個文件的內(nèi)容保留在內(nèi)存中):
with open('a.txt', 'r') as a, open('b.txt', 'r') as b:
a_content = set(a)
b_content = set(b)
result = a_content.intersection(b_content)

森林海
TA貢獻2011條經(jīng)驗 獲得超2個贊
如果您擔心速度,那么您應該使用操作系統(tǒng)設施,而不是 Python 循環(huán)。通常,查找單獨行的最快方法是對兩個文件進行排序,然后進行簡單的文件比較。如果你堅持使用Python,那也是一種更快的方法。

慕勒3428872
TA貢獻1848條經(jīng)驗 獲得超6個贊
您的方法可以工作,但效率非常低,因為您正在遍歷 file2 以查找 file1 中的每個單詞/行。嘗試將 file1 和 file2 都轉為集合,然后比較集合;我很確定 Python 有類似 .intersect 或 .intersection 的東西來比較兩個集合、列表、數(shù)組或其他數(shù)據(jù)結構。
添加回答
舉報
0/150
提交
取消