比较Python中的2个txt文件

2024-04-25 02:12:14 发布

您现在位置: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的每一行,如果有连续的匹配,则返回true。例如

杰克从第一个文件A和检查与第一行的文件B,如果找到然后约翰是检查,然后吉姆。然后我们移动文件B的第二行,依此类推。之后,我们转到文件A的第二行并重复过程。它只有在匹配是连续的时才会返回true,因此文件B的第一行将返回true,因为jack john和jim顺序正确,而文件B的第二行将返回false,因为它们顺序不正确。你知道吗

我要把它当成一个字一个字,不会把整行当作一个字符串,所以必须把它分解成几个字,然后逐字比较。。你知道吗


Tags: 文件txttrue顺序johnjacktigerfiler
2条回答

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

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

如果您有多行,每行都有多个单词,那么您应该首先读取所有行,然后为每行调用compare函数,将从每行分割的单词传递给它。你知道吗

下面是一种内存效率低下、强制执行比较函数的方法:

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)

我们可以通过传递\u list和b\u list的索引并将\u list和b\u list设置为compare()函数的“全局”来优化它。要么真的让它们成为“全局的”,要么把compare()包装到另一个定义了一个\u列表和b\u列表的函数中,然后只把索引传递到函数中。。。最后但并非最不重要的一点是将它实现为一个类,并将a_list和b_list存储为属性,并将compare()作为类的一个方法,该类接受默认索引为0的索引。你知道吗

相关问题 更多 >