比较 Python 中的 2 个 txt 文件

Comparing 2 txt files in Python

我有 2 个 txt 文件。

文件A:

jack john jim
george colin stan

文件 B:

hell jack john jim goad tiger
tall jack jim john filer dom
hell george colin jim stab tiger
track jack george colin stan forever

我希望文件 A 的每一行与文件 B 的每一行逐字检查,如果有连续匹配,则 return 为真。例如

获取第一个文件 A 中的 jack 并与文件 B 的第一行进行检查,如果找到则检查 john,然后检查 jim。然后我们移动文件 B 的第二行,依此类推。之后,我们继续文件 A 的第二行并重复 process.It 将 return 仅当匹配是连续的时才为真,因此文件 B 的第一行将 return 为真,因为 jack john 和 jim是有序的,但文件 B 的第二行将 return false 因为它们的顺序不正确。

我要一个字一个字的看,不会把整行看成一个字符串,所以要拆成字,然后一个字一个字比较..

如果你把每个词都放在单独的一行上,你可以这样做

in_file.readlines()

获取行列表。如果您将所有单词都放在一行中并用空格分隔,则执行:

in_file.read().split(' ')

比较应该是直截了当的,像这样:

def compare(a_words, b_words):
    for a_word, b_word in izip(a_words, b_words):
        if a_word != b_word:
            return False
    return True

如果你有多行,每行都有多个单词,那么你应该首先阅读所有行,然后为每一行调用比较函数,将单词从每一行中拆分出来。

这是实现比较函数的内存效率低下、暴力破解的方法:

def compare(list_a,list_b):
    for a in list_a:
        try:
            b_index=list_b.index(a)
        except ValueError:
            return False
        return compare(list_a[1:],b[b_index:])

您将需要从每个文件中逐行读取,以便嵌套循环调用 compare() 函数:

a_lines_raw=a_file.readlines()
b_lines_raw=b_file.readlines()

a_lines=[ line.split() for line in a_lines_raw ]
b_lines=[ line.split() for line in b_lines_raw ]

for a_line in a_lines:
    for b_line in b_lines:
        if compare(a_line,b_line):
            print "Match:", str(a_line), str(b_line)

可以通过传递 a_list 和 b_list 的索引并将 a_list 和 b_list "global" 传递给 compare() 来优化这一点功能。通过真正使它们 "global" 或将 compare() 包装到另一个定义 a_list 和 b_list 的函数中,然后只将索引传递给函数......最后但并非最不重要的 -将把它实现为 class 并将 a_list 和 b_list 存储为属性,并将 compare() 作为 class 接受索引的方法,默认索引为 0对于两者。