比较 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对于两者。
我有 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对于两者。