文本文件重复内容处理需求:将出现3次的内容替换为唯一内容
解决方案:文本内容均衡调整工具
核心思路
- 解析文件每行的两个元素,统计所有元素的出现频次
- 定位出现3次的重复元素和仅出现1次的稀缺元素
- 遍历文件行,找到包含重复元素的行,选择不会导致行内重复的稀缺元素完成替换(仅替换一次)
- 保证替换后无行内重复,且实现内容频次均衡
Python 实现代码
def balance_content(file_path): # 读取文件并过滤空行 with open(file_path, 'r', encoding='utf-8') as f: lines = [line.strip() for line in f if line.strip()] # 统计每个元素的出现次数 element_counts = {} for line in lines: elem1, elem2 = line.split('-') element_counts[elem1] = element_counts.get(elem1, 0) + 1 element_counts[elem2] = element_counts.get(elem2, 0) + 1 # 筛选目标替换元素和候选元素 target_elem = None candidate_elems = [] for elem, count in element_counts.items(): if count == 3: target_elem = elem elif count == 1: candidate_elems.append(elem) # 无符合条件的元素,直接返回原内容 if not target_elem or not candidate_elems: return lines # 遍历找到第一个可替换的行 modified = False for idx, line in enumerate(lines): a, b = line.split('-') # 处理行首是目标元素的情况 if a == target_elem: for candidate in candidate_elems: if candidate != b: lines[idx] = f"{candidate}-{b}" modified = True break # 处理行尾是目标元素的情况 elif b == target_elem: for candidate in candidate_elems: if candidate != a: lines[idx] = f"{a}-{candidate}" modified = True break if modified: break return lines # 调用示例 if __name__ == "__main__": # 替换为你的输入文件路径 input_file = "input.txt" result_lines = balance_content(input_file) # 将结果写入输出文件 with open("output.txt", 'w', encoding='utf-8') as f: f.write('\n'.join(result_lines))
代码关键说明
- 文件处理:使用
with语句自动管理文件资源,避免手动关闭文件的麻烦 - 频次统计:通过字典快速统计每个元素的出现次数,时间复杂度O(n)
- 替换逻辑:优先选择第一个可替换的行,遍历候选元素确保替换后行内无重复,避免出现
Alex-Alex这类无效行 - 安全输出:将结果写入新文件,不会覆盖原始文件,方便对比验证
示例验证
输入文件input.txt内容:
John-Alex John-Kyle John-Ben Ben-Gary
运行代码后可能得到的输出(符合要求的一种结果):
John-Alex Alex-Kyle John-Ben Ben-Gary
内容的提问来源于stack exchange,提问作者Koneko Sama
相关产品推荐
相关产品推荐

