我正在尝试从一个包含2.5亿个4.4 GB项的大型文本文件中删除重复项。

令我印象深刻的是,我可以使用以下代码在几分钟之内将该文件加载到python列表中:

x = []

with open("online.txt") as file:
    for l in file:
       x.append(l)

    print('count of array: ')
    print(len(x))


但是,当我试图简单地检查以确保将下一项添加到数组之前不存在下一项时,要花很多小时才能完成。我觉得我缺少一些可以真正加快速度的简单操作。

这是我用来检查重复项的代码:

a = []
x = []

with open("online.txt") as file:
    for l in file:
        if l in a:
            print('duplicate')
            print(l)
        else:
            x.append(l.strip())
        a.append(l)

    print('with duplicates: ');
    print(len(a))
    print('without duplicates: ')
    print(len(x))


它运行在具有64 Gig ram和现代双至强处理器的服务器上。

最佳答案

问题在于一个简单的列表,python必须在添加新条目之前每次搜索每个条目。

您可以尝试使用python字典或集合而不是列表。这些数据结构可以更快地确定条目是否已经存在。

只需更改您的代码:

a = {}  # set
x = {}

with open("online.txt") as file:
    for l in file:
        if l in a:
            print('duplicate')
            print(l)
        else:
            x.add(l.strip())  # add to the set
        a.add(l)


您没有指定输入文件格式,但是可能会通过将整个数据集加载到一个巨大的字符串中,然后使用python函数将其拆分,而不是像此处手动进行那样来提高速度。

10-06 16:20
查看更多