如何从文件中删除重复行?

48 投票
15 回答
145656 浏览
提问于 2025-04-15 13:19

我有一个文件,里面只有一列内容。请问怎么才能删除文件中重复的行呢?

15 个回答

26
uniqlines = set(open('/tmp/foo').readlines())

这段代码会给你一个独特行的列表,也就是说每一行都是不重复的。

如果你想把这些独特的行写回到某个文件里,其实非常简单:

bar = open('/tmp/bar', 'w').writelines(uniqlines)

bar.close()
46

如果你在使用*nix系统(比如Linux或Mac),可以试着运行下面这个命令:

sort <file name> | uniq
85

在Unix/Linux系统上,可以使用 uniq 命令,正如David Locke的回答所说,或者使用 sort,正如William Pursell的评论提到的。

如果你需要一个Python脚本:

lines_seen = set() # holds lines already seen
outfile = open(outfilename, "w")
for line in open(infilename, "r"):
    if line not in lines_seen: # not a duplicate
        outfile.write(line)
        lines_seen.add(line)
outfile.close()

更新: 使用 sortuniq 的组合可以去掉重复的内容,但返回的文件会把行进行排序,这可能不是你想要的效果。上面的Python脚本不会重新排列行,只是简单地去掉重复的内容。当然,如果你想让上面的脚本也进行排序,只需去掉 outfile.write(line),然后在循环结束后,直接使用 outfile.writelines(sorted(lines_seen)) 来写入排序后的内容。

撰写回答