python比较两个大型列表并处理一个

时间:2017-03-17 03:40:15

标签: python list large-data

我有两个文本文件。在a.txt中,有这样的行(一百万行):

991000000019999998,b10000021,
991000000019703408,b10000021,
991000545455435408,b10000045,
991000000029703408,b10000045,
...

第一部分是条形码(991000000019703408),第二部分是bib_number(b10000021)。 请注意,bib_number可能在每行中都是重复的。但条形码是唯一的。所以使用Set()我觉得不行。 在另一个文件b.txt中,仅有关于bib_number(60万条记录)的信息:

b10000021
b10000045
b10000215
...

现在我必须比较两个文件,在a.txt中,如果每行的bib_number(如b10000045)不在b.txt中,则需要将整行输出到c.txt,如(991000000029703408,b10000045,)

我写这样的代码,但直到20分钟才重新开始。

with open("a.txt", "r") as f1,open("b.txt", "r") as f2,open("c.txt","w") as f3: 
    total_bb=f1.readlines() 
    list_match=f2.readlines() 
    for item_bb in total_bb:
        recordList=re.split(",",item_bb)
        item_bb_w=(recordList[1])+'\n'
        if item_bb_w not in list_match:
            f3.write(item_bb)

是否有任何技巧可以做这两个大型列表比较?感谢

1 个答案:

答案 0 :(得分:1)

使用set,查找为O(1)

with open("a.txt", "r") as f1,open("b.txt", "r") as f2,open("c.txt","w") as f3:
    bs = set(b.strip() for b in f2)
    for a in f1:
        x = a.split(',')
        if x[1].strip() not in bs:
            f3.write(a)

我还会查看csv模块来读取逗号分隔值。