我有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
我想用文件B的每一行逐字检查文件A的每一行,如果有连续的匹配则返回true。例如
从第一个文件A中获取并使用文件B的第一行检查,如果找到,则检查john,然后检查jim。然后我们移动文件B的第二行,依此类推。之后我们转到文件A的第二行并重复该过程。只有当匹配是连续的时才返回true,因此文件B的第一行将返回True,因为jack john和jim是有序的,但是文件B的第二行将是返回false,因为它们的顺序不正确。
我必须逐字逐句地将其视为一个字符串,因此必须将其分解为单词然后逐字逐句地进行比较。
答案 0 :(得分:0)
如果你有单独的单词,你可以
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函数传递它从每行分开的单词。
答案 1 :(得分:0)
这是实现比较功能的内存效率低下,粗暴的方式:
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“全局”到compare()
函数来优化它。要么真正使它们成为“全局”,要么将compare()
包装到另一个定义a_list和b_list的函数中,然后只将索引传递给函数...最后但并非最不重要的 - 将它作为类和存储实现a_list和b_list作为属性,并且compare()
作为接受具有默认0索引的索引的类的方法。