如何用Python去除文本文件重复项?解决空格差异误判问题
解决文本文件去重时行内空格数量不同的问题
你的核心需求是:去除文本文件中的重复行,只要行内数字内容相同,不管中间空格数量多少都算重复(比如示例里的1 1和1 1视为重复,只保留一行)。但当前代码因空格处理逻辑混乱,无法正确识别这类重复行,导致写入结果出错。
现有代码的问题
- 判断逻辑矛盾:用第一个数字
res[0]判断重复,但存入seen的是处理后的整行,会导致只要首数字相同就被误判重复,完全不符合需求。 - 空格处理低效且有bug:手动循环处理空格的逻辑只能识别第一个空格,无法适配多空格场景,生成的判断依据不准确。
解决方案代码
核心思路:把每行内容**标准化(统一空格规则)**作为去重判断的依据,但保留原行的空格格式写入文件,兼顾准确性和格式保留。
with open('test1.txt', 'r') as f, open('test3.txt', 'w') as output: seen = set() # 集合查询效率远高于列表,适合去重场景 for line in f: stripped_line = line.strip() if not stripped_line: # 跳过空行,直接写入保留原格式 output.write(line) continue # 标准化:用split()自动处理任意多空格,转成元组作为判断键 unique_key = tuple(stripped_line.split()) if unique_key not in seen: seen.add(unique_key) output.write(line) # 写入原行,保留原始空格格式
代码说明
stripped_line.split()会自动把任意数量的空格、制表符等空白字符当成分隔符,比如1 1和1 1分割后都会得到['1', '1'],转成元组('1','1')作为统一的判断依据。- 用
set存储已见过的标准化键,查询速度更快,避免列表遍历的低效。 - 空行直接保留写入,不参与去重判断(如果需要空行也去重,可去掉空行判断,将空行的键设为空元组
())。 - 写入时用原行
line,完全保留原始的空格格式,解决你之前错误写入的问题。
内容的提问来源于stack exchange,提问作者Kaleb Brookshire
相关产品推荐
相关产品推荐

