更快地从Python中删除非常大的文本文件中的重复项?

Kos*_*Kos 2 python text duplicates python-3.x

我有一个非常大的文本文件,有重复的条目,我想消除.我不关心条目的顺序,因为稍后将对文件进行排序.

这是我到目前为止:

unique_lines = set()
outfile = open("UniqueMasterList.txt", "w", encoding = "latin-1")

with open("MasterList.txt", "r", encoding = "latin-1") as infile:
    for line in infile:
        if line not in unique_lines:
            outfile.write(line)
            unique_lines.add(line)

outfile.close()
Run Code Online (Sandbox Code Playgroud)

它已运行30分钟,尚未完成.我需要它更快.Python中更快的方法是什么?

Pru*_*une 5

查找相应的系统命令.在Linux/UNIX中,您将使用

uniq MasterList.txt > UniqueMasterList.txt
Run Code Online (Sandbox Code Playgroud)

操作系统通常知道执行这些操作的最佳方法.


评论后编辑

@Mark Ransom提醒我,uniq依赖于匹配文件中连续的行.实现此目的的最简单方法是对文件进行排序:

sort MasterList.txt | uniq > UniqueMasterList.txt
Run Code Online (Sandbox Code Playgroud)

  • PS`unitq`仅在数据已*已排序时才有效,否则必须与`sort`配对.如果你不这样做,它将*非常快*但不正确. (2认同)
  • “sort”命令还可以使用标志“u”直接删除重复项。如果您在多核系统上运行代码,它还可以利用多个核心,例如“sort --parallel=4 -u file-with-duplicates.csv > file-no-duplicates.tsv”。 (2认同)