删除重复项:python结果与sort -u不同

时间:2016-07-13 00:38:27

标签: python list set duplicates

我有一个很长的文本文件(2GB),我使用以下方法删除了重复文件:

sort -u filename > outfile1

>>> data = open('filename', 'r').readlines()
>>> u = list(set(data))
>>> open('outfile2', 'w').writelines(u)

然而,两个文件outfile2和outfile1具有不同数量的条目:

wc -l outfile?
 185866729 filename
 109608242 outfile1
 109611085 outfile2

这怎么可能?

更新。 按照查看数据的请求,我发现python将删除重复条目,如:

 låsningernes
 læsningernes
 løsningernes

有效地在sort -u中忽略第二个字符,并且仅保留第一个条目。相反,Python可以很好地区分这三个记录。

2 个答案:

答案 0 :(得分:3)

没有看到实际输出(或者至少是'额外'线,我们只能猜测。

但是它会归结为sort完成了多少预处理,它发现了比set()更多的重复项。

可能的原因可能是

  • 某些行上的尾随空格。它们可能会被sort删除,但不会被set删除。
  • unicode字符的不同处理。也许排序将其中的一些映射到一组较小的等价物上,产生更多重复。

答案 1 :(得分:0)

如果您将它们组合并将它们创建为列表,则可以执行此操作:

non_duplicates= [a for i,a in enumerate(l) if i == l.index(a)]

这也保持了它所包含的项目的顺序