我有一个非常大的文本文件,其中有重复的条目,我想消除它。我不关心条目的顺序,因为稍后将对文件进行排序。
这是我到目前为止所做的:
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中的更快的方法?
答案 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)并且内存的使用可以被限制为一个恒定的数量,具体取决于所使用的哈希表的大小。