如何删除文本中的重复行
何时需要删除重复行
重复行问题在数据处理中非常普遍。常见场景:合并多个来源的关键词列表时产生的重复词条;从数据库导出的重复记录;多人协作的文档中重复添加的条目;爬虫或数据抓取结果中的重复 URL 或内容;合并多份配置文件时出现的重复条目。
在线工具去重
最快的方法是使用在线文本去重工具。将包含重复行的文本粘贴到输入框,工具会保留每行的第一次出现并删除后续重复,输出去重后的结果。可以选择是否区分大小写(Apple 和 apple 是否视为重复)以及是否删除空白行。
命令行工具(Unix/Linux/macOS)
# sort + uniq 组合:先排序再去重(相邻重复行才能被 uniq 识别)
sort input.txt | uniq > output.txt
# 仅删除连续重复行(不排序)
uniq input.txt > output.txt
# 统计每行出现次数
sort input.txt | uniq -c
# 只保留出现超过一次的行
sort input.txt | uniq -d
# 只保留只出现一次的行(唯一行)
sort input.txt | uniq -u
Python 代码实现
# 保留顺序的去重(使用 dict 或 set)
def remove_duplicates(text):
lines = text.splitlines()
seen = {}
result = []
for line in lines:
key = line.strip().lower() # 忽略大小写和前后空格
if key not in seen:
seen[key] = True
result.append(line)
return '\n'.join(result)
# 注意:使用 set() 去重不保证顺序
# unique_lines = list(set(lines)) # 不推荐用于需要保留顺序的情况
保留顺序 vs 不保留顺序
去重时有两个策略:保留顺序(保留每行第一次出现,删除后续重复)和不保留顺序(用 set 去重后随机顺序输出)。对于大多数列表整理场景,保留原始行顺序(删除后续重复而非先出现的)更符合预期。sort + uniq 组合会先排序后去重,结果是排序后的无重复列表,与原始顺序不同。
近似重复行的处理
精确重复行很好处理,但"近似重复"(如仅有空格数量差异、大小写不同、前后有空白字符)需要在比较前先标准化。标准化步骤:去除首尾空白(trim)、统一大小写(全转小写或全转大写)、压缩连续空格为单个空格。执行这些标准化后再比较,可以捕获更多实际重复的行。
大文件处理的性能考量
对于包含数百万行的大型文件,在线工具可能会遇到浏览器内存限制。这种情况推荐使用命令行工具:sort -u input.txt > output.txt 可以高效处理非常大的文件,因为 sort 工具支持外部排序(临时文件),不需要将全部数据加载到内存中。
Excel 和 Google Sheets 中的去重
如果数据在电子表格中,Excel 的"删除重复项"功能(数据选项卡)可以按列去重。Google Sheets 可以使用 =UNIQUE(A1:A100) 公式返回去重后的列表。这对于电子表格数据的去重比导出再处理更方便。
立即免费使用相关工具
免费使用 →