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

python比较两个大列表并处理一个,python,list,large-data,Python,List,Large Data,我有两个文本文件。在a.txt中,有这样的行(一百万行): 第一部分是条形码(99100000019703408),第二部分是bib_编号(b10000021)。 请注意,bib_编号可能在每行中重复。但条形码是唯一的。所以我认为使用Set()是不好的。 在另一个文件b.txt中,信息仅与bib_编号有关(60万条记录): 现在我必须比较这两个文件,在a.txt中,如果eachline的bib_编号(如b10000045)不在b.txt中,那么整行需要输出到c.txt,如(99100000029

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

第一部分是条形码(99100000019703408),第二部分是bib_编号(b10000021)。
请注意,bib_编号可能在每行中重复。但条形码是唯一的。所以我认为使用Set()是不好的。 在另一个文件b.txt中,信息仅与bib_编号有关(60万条记录):

现在我必须比较这两个文件,在a.txt中,如果eachline的bib_编号(如b10000045)不在b.txt中,那么整行需要输出到c.txt,如(99100000029703408,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)

做这两个大列表比较有什么诀窍吗?感谢使用
set
s,查找是
O(1)


我还将查看用于读取逗号分隔值的
csv
模块。

您关心顺序吗?如果不只是将它们转换为
set
s和
set1-set2
将为您提供所有缺失的号码。请注意,bib_号码可能在每一行中重复。但是条形码是唯一的(我已经编辑过),所以我认为使用Set()是不合适的。SET()将删除相同的元素。我需要输出整行,而不仅仅是bib_编号。ThanksUpdated可以写出整个
a
@AChampion不应该'if x[1]。strip()不在b“be”if x[1]。strip()不在bs?非常感谢!它非常快!只需要大约3秒钟就可以得到结果。顺便说一句,为什么在f2中使用set(b.strip()表示b)可以明显提高搜索速度吗?列表中的查找是
O(n)
而集合中的查找是
O(1)
。最初的方法是
O(n^2)
b10000021
b10000045
b10000215
...
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)
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)