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

时间:2016-12-20 20:12:32

标签: python python-3.x text duplicates

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

这是我到目前为止所做的:

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()

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

3 个答案:

答案 0 :(得分:5)

查找相应的系统命令。在Linux/UNIX中,您可以使用

uniq MasterList.txt > UniqueMasterList.txt

操作系统通常知道做这些事情的最佳方法。

评论后修改

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

sort MasterList.txt | uniq > UniqueMasterList.txt

答案 1 :(得分:0)

在Python中使用与uniq相同的技术:

import itertools
with open("MasterList.txt", "r", encoding = "latin-1") as infile:
    sorted_file = sorted(infile.readlines())
for line, _ in itertools.groupby(sorted_file):
    outfile.write(line)

这假设整个文件将适合内存两次。或者该文件已经排序,您可以跳过该步骤。

答案 2 :(得分:0)

我建议的简单方法是使用散列和散列表。您可以使用有效的散列函数散列每一行,然后将其插入散列表并输出count为1的内容。类似于解决单词/字母使用哈希表来计算问题。为了查找它只需要花费o(1)并且内存的使用可以被限制为一个恒定的数量,具体取决于所使用的哈希表的大小。