0

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

好吧,问题是如果我像上面所说的那样编程,完成所有工作实际上需要很长时间。那么有没有更好的方法来做到这一点?

4

4 回答 4

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))
于 2012-04-24T16:09:17.733 回答
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)
于 2012-04-24T16:10:03.683 回答
0

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

于 2012-04-24T16:08:43.680 回答
0

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

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

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

于 2012-04-24T16:09:47.047 回答