0

我试图从两组列表中找到重叠列表。我首先生成第一个列表

while True:
    line=f.readline()
    if not line:
        break
    list_1.append(line)

并使用此列表扫描第二个文件:

while True:
    line1=f1.readline()
    if not line1:
        break
    for i in list_1:
        if i==line1[:17]:
            list_2.append(line1)
4

3 回答 3

4

ThiefMasters answer 将以任意顺序输出公共行。如果您希望项目的输出顺序与它们在其中一个文件中出现的顺序相同,请首先将另一个文件读入一组:

with open("file1.txt") as f:
    file1_set = set(f)

然后搜索控制顺序的文件:

with open("file2.txt") as f:
    list2 = [line for line in f if line in file1_set]

如果生成list2的内存不适合内存(我想这有点牵强),我们仍然可以通过将结果连续写回输出文件来使其工作:

with open("file2.txt") as f:
    with open("out.txt", "w") as out:
        for line in f:
            if line in file1_set:
                out.write(line)
于 2012-04-21T13:13:13.993 回答
3

只要没有文件太大,将所有行存储在集合中,然后比较这些集合:

lines_1 = set(f)
lines_2 = set(f1)
lines_in_both = lines_1 & lines_2
于 2012-04-21T12:52:24.403 回答
2

如果你想找出两个文件的不同之处,你也可以使用 difflib 模块,它包含在 python 标准库中。该模块提供用于比较序列的类和函数。例如,它可以用于比较文件,并且可以生成各种格式的差异信息,包括 HTML 和上下文以及统一差异。您可以在difflib 文档中找到有用的比较方法。

difflib.SequenceMatcher(None, file1.read(), file2.read())
于 2012-04-21T13:41:37.487 回答