Python实现两个TXT文件逐行查找并打印重复内容问题求助
解决两个文件中重复行的查找问题
你的代码存在几个关键问题,导致无法得到预期结果:
- 错误地将
file1和file2这两个行列表再次嵌套到新列表中,再用chain合并后,z里实际是两个子列表(整个文件的行集合),而非所有行的扁平化列表,这使得后续的count判断完全失效。 - 直接打印生成器对象只会输出其内存地址,需要遍历生成器才能获取内容。
- 用
list.count()在大列表中做重复判断效率极低,尤其当文件有数千条内容时,会大幅拖慢运行速度。
改进方案:利用集合的交集操作
集合的查找和交集操作时间复杂度远低于列表遍历,非常适合处理大文件的重复内容查找:
# 使用with语句自动管理文件关闭,避免手动close的遗漏 with open("test.txt", "r") as f1, open("test2.txt", "r") as f2: # 读取文件所有行并转为集合,自动去重单个文件内的重复行 lines1 = set(f1.read().splitlines()) lines2 = set(f2.read().splitlines()) # 求两个集合的交集,即同时出现在两个文件中的行 duplicate_lines = lines1 & lines2 # 打印所有重复行 for line in duplicate_lines: print(line)
保留单个文件内重复行的情况(如果需要)
如果你的需求是:即使某行在单个文件内重复出现,只要它在另一个文件也出现,就需要输出,可以使用以下方式:
from collections import Counter with open("test.txt", "r") as f1, open("test2.txt", "r") as f2: lines1 = f1.read().splitlines() lines2 = f2.read().splitlines() # 统计两个文件中所有行的出现次数 all_lines = lines1 + lines2 line_counts = Counter(all_lines) # 筛选出在两个文件中都出现过的行(即总出现次数至少来自两个文件) duplicate_lines = [line for line in line_counts if line in lines1 and line in lines2] for line in duplicate_lines: print(line)
原代码的修正版本(仅作参考,效率较低)
如果你想基于原代码的思路修正,需要先扁平化行列表,再处理:
from itertools import chain with open("test.txt", "r") as f1, open("test2.txt", "r") as f2: file1 = f1.read().splitlines() file2 = f2.read().splitlines() # 直接合并两个行列表,无需嵌套后再chain z = list(chain(file1, file2)) z.sort() # 遍历查找重复项,避免重复输出同一行 seen = set() duplicates = set() for line in z: if line in seen: duplicates.add(line) seen.add(line) for line in duplicates: print(line)
内容的提问来源于stack exchange,提问作者Jaime Torres
相关产品推荐
相关产品推荐

