本文介绍一种python脚本方案,用于识别并删除“逐行递增前缀重复”的文本行(如“this” → “this line” → “this line has”),仅保留每组中最长的那行,适用于日志精简、命令输出去重等场景。
在处理某些结构化文本(例如命令行逐步输出、分步调试日志或自动生成的描述性语句)时,常出现“前缀嵌套式重复”:后一行完全以前行内容为开头,形成递增包含关系。此时,标准去重(如基于set()的精确匹配)完全无效——因为每一行字面值都不同。真正需要的是逻辑去重:将具有相同起始子串、且呈连续递增关系的行视为一个“前缀链”,只保留链中最后一项(即最长行)。
以下脚本实现了这一逻辑:
infilename = "input.txt" # 替换为你的输入文件路径
with open(infilename) as fin:
# 读取所有行并去除末尾换行符(避免因\n导致startswith判断失败)
lines = list(map(str.rstrip, fin))
i = 0
while i < len(lines):
# 向后检查:若下一行以当前行开头,则跳过当前行(它是更短的前缀)
while i + 1 < len(lines) and lines[i + 1].startswith(lines[i]):
i += 1
# 此时lines[i]是当前前缀链中最长的行,输出它
print(lines[i])
i += 1运行效果示例(输入为题目所给内容):
This This line This line has This line has five This line has five strings
输出仅
一行:
立即学习“Python免费学习笔记(深入)”;
This line has five strings
✅ 关键设计说明:
⚠️ 注意事项:
此方法精准解决“前缀链压缩”问题,比正则或模糊匹配更简洁、可读性强,是文本流后处理的实用利器。