gpt4 book ai didi

python - 在大文本文件中查找重复记录

转载 作者:IT王子 更新时间:2023-10-29 01:09:42 30 4
gpt4 key购买 nike

我在 Linux 机器 (Redhat) 上,我有一个 11GB 的文本文件。文本文件中的每一行都包含一条记录的数据,该行的前 n 个字符包含该记录的唯一标识符。该文件包含略多于 2700 万条记录。

我需要验证文件中没有多个记录具有相同的唯一标识符。我还需要对一个 80GB 的文本文件执行此过程,因此任何需要将整个文件加载到内存中的解决方案都不实用。

最佳答案

逐行读取文件,因此您不必将其全部加载到内存中。

为每一行(记录)创建一个 sha256 哈希(32 字节),除非您的标识符更短。

将散列/标识符存储在 numpy.array 中。这可能是存储它们的最紧凑的方式。 2700 万条记录乘以 32 字节/哈希是 864 MB。这应该适合如今体面的机器的内存。

为了加快访问速度,您可以使用第一个,例如2 个字节的散列作为 collections.defaultdict 的键,并将其余散列放在值的列表中。这实际上会创建一个包含 65536 个桶的哈希表。对于 27e6 条记录,每个桶平均包含大约 400 个条目的列表。这意味着比 numpy 数组搜索速度更快,但会使用更多内存。

d = collections.defaultdict(list)
with open('bigdata.txt', 'r') as datafile:
for line in datafile:
id = hashlib.sha256(line).digest()
# Or id = line[:n]
k = id[0:2]
v = id[2:]
if v in d[k]:
print "double found:", id
else:
d[k].append(v)

关于python - 在大文本文件中查找重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16347775/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com