删除重复项:python结果不同于sort-u
我有一个很长的文本文件(2GB),我使用以下方法删除了重复文件:删除重复项:python结果不同于sort-u,python,list,set,duplicates,Python,List,Set,Duplicates,我有一个很长的文本文件(2GB),我使用以下方法删除了重复文件: sort -u filename > outfile1 及 但是,两个文件outfile2和outfile1的条目数不同: wc -l outfile? 185866729 filename 109608242 outfile1 109611085 outfile2 这怎么可能 更新。 根据查看数据的请求,我发现python将删除重复项,如: låsningernes læsningernes løsning
sort -u filename > outfile1
及
但是,两个文件outfile2和outfile1的条目数不同:
wc -l outfile?
185866729 filename
109608242 outfile1
109611085 outfile2
这怎么可能
更新。
根据查看数据的请求,我发现python将删除重复项,如:
låsningernes
læsningernes
løsningernes
实际上,
排序-u
中忽略第二个字符,只保留第一个条目。相反,Python在区分这三条记录方面做得很好。没有看到实际输出(或者至少是“额外”行,我们只能猜测)
但这将取决于sort
完成了多少预处理,它比set()
找到了更多的重复项
可能的原因可能是
- 某些行上的尾随空格。它们可以通过
删除,但不能通过sort
删除set
- 对unicode字符的不同处理。也许排序会将其中一些字符映射到一组较小的等价字符上,从而产生更多的重复字符
non_duplicates= [a for i,a in enumerate(l) if i == l.index(a)]
这也保持了它所包含的项目的顺序检查
diff-u outfile*
可能会让我们了解到,如果不访问输入文件,这些差异是难以想象的。简单的方法是对outfile2进行排序,并打印outfile1和outfile2之间的差异,这不可能是wc的实际输出
@JohnGordon不确定您的意思。我添加了文件名以进行比较(就像在我的工作流中一样,它位于不同的文件夹中)我指的是输出中存在filename
,而您只键入了outfile?
。我将接受这个答案,因为它正确地指出这是unicode处理。
non_duplicates= [a for i,a in enumerate(l) if i == l.index(a)]