You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:35:23