如何从文件中删除重复行?
我有一个文件,里面只有一列内容。请问怎么才能删除文件中重复的行呢?
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()
更新: 使用 sort
和 uniq
的组合可以去掉重复的内容,但返回的文件会把行进行排序,这可能不是你想要的效果。上面的Python脚本不会重新排列行,只是简单地去掉重复的内容。当然,如果你想让上面的脚本也进行排序,只需去掉 outfile.write(line)
,然后在循环结束后,直接使用 outfile.writelines(sorted(lines_seen))
来写入排序后的内容。