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

如何保留文本文件中仅出现一次的行?现有去重代码无法满足需求

如何保留文件中仅出现一次的行(彻底移除所有重复行)

你的原代码问题在于它只是做了去重保留首次出现——重复的行只删掉后续出现的,但你要的是只要行重复过(出现次数≥2)就全部移除,只留下那些只出现过一次的行。要实现这个需求,我们需要先统计每行的出现次数,再根据筛选条件写入新文件。

解决方案步骤

核心思路是先遍历一次文件统计每行的出现次数,再遍历一次文件只写入出现次数为1的行:

方法一:分两次读取文件(适合大文件,内存占用低)

# 第一步:统计每行的出现次数
line_counts = {}
with open("test.txt", "r") as input_file:
    for line in input_file:
        # 去掉换行符,避免因为换行符导致相同内容被误判为不同行
        stripped_line = line.rstrip('\n')
        line_counts[stripped_line] = line_counts.get(stripped_line, 0) + 1

# 第二步:写入仅出现一次的行
with open("unique_lines.txt", "w") as output_file:
    with open("test.txt", "r") as input_file:
        for line in input_file:
            stripped_line = line.rstrip('\n')
            if line_counts[stripped_line] == 1:
                output_file.write(line)

方法二:一次性读取所有行(适合小文件,代码更简洁)

如果你的文件不大,可以一次性把所有行读入内存,这样只需要打开文件两次(读+写):

# 读取所有行
with open("test.txt", "r") as f:
    lines = f.readlines()

# 统计每行出现次数
line_counts = {}
for line in lines:
    stripped = line.rstrip('\n')
    line_counts[stripped] = line_counts.get(stripped, 0) + 1

# 筛选并写入结果
with open("unique_lines.txt", "w") as f:
    for line in lines:
        stripped = line.rstrip('\n')
        if line_counts[stripped] == 1:
            f.write(line)

关键细节说明

  • 为什么用rstrip('\n')而不是strip()?因为如果你的行内容前后有空格(比如001010),strip()会去掉这些空格,可能导致统计错误。rstrip('\n')只去掉末尾的换行符,保留行的原始内容(除了换行符)。
  • 如果你的文件里行的换行符是\r\n(Windows格式),可以改成rstrip('\r\n'),或者直接用rstrip()只去掉末尾的空白字符(不影响内容的话)。

验证结果

针对你的test.txt内容(假设每行是单独的字符串):

010101
001010
010101
000011
111111
010101

运行代码后,unique_lines.txt会得到:

001010
000011
111111

完全符合你的需求。

内容的提问来源于stack exchange,提问作者accbizzle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:20:39