与使用python的大文件B相比,从大文件A中查找唯一行的最快方法是什么?

时间:2012-04-24 16:04:58

标签: python compare

我得到了包含300,000多行的txt文件A和包含600,000多行的txt文件B.现在我想要做的是逐行筛选文件A,如果该行没有出现在文件B中,那么它将被附加到文件C.

嗯,问题是,如果我像上面所说的那样编程,那么完成所有工作需要很长时间。那么有更好的方法吗?

4 个答案:

答案 0 :(得分:14)

这应该非常快:

with open("a.txt") as a:
    with open("b.txt") as b:
        with open("c.txt", "w") as c:
            c.write("".join(set(a) - set(b)))

请注意,这将忽略A或B中的任何订单。如果您绝对需要保留A的订单,您可以使用此:

with open("a.txt") as a:
    with open("b.txt") as b:
        with open("c.txt", "w") as c:
            b_lines = set(b)
            c.write("".join(line for line in a if not line in b_lines))

答案 1 :(得分:1)

你能把B放在记忆中吗?如果是这样,请读取文件B并使用其包含的所有行创建索引。然后逐行阅读A并检查每一行是否出现在索引中。

with open("B") as f:
    B = set(f.readlines())

with open("A") as f:
    for line in f.readlines():
        if line not in B:
           print(line)

答案 2 :(得分:0)

对python一无所知,但是:如何将文件A排序成特定的顺序?然后你可以逐行浏览文件B并进行二进制搜索 - 效率更高。

答案 3 :(得分:0)

将文件B中的所有行读入set

blines = set(file_b)
for line in file_a:
    if not line in blines:
       append_to_file_c

600k +真的不是那么多数据......