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

2024-06-25 23:21:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很长的文本文件(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在区分这三条记录方面做得很好。你知道吗


Tags: 文件writelinesdata条目openfilenamesortlist
2条回答

如果将它们合并并创建为一个列表,则可以执行以下操作:

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

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

如果看不到实际输出(或者至少是“额外”行),我们只能猜测。你知道吗

但归根结底还是要看sort做了多少预处理,这比set()找到更多的重复项。你知道吗

可能的原因是

  • 某些行上的尾随空格。它们可能被sort移除,但不能被set移除。你知道吗
  • unicode字符的不同处理。也许sort会将其中一些映射到一组更小的等价物上,从而产生更多的副本。你知道吗

相关问题 更多 >