Python 比较包含数据组的两个文本文件
我有两个包含数据组的文本文件。这些组由4行数据组成,每个组之间有一个空格。我试图将文件1中的集合与文件2中的集合进行比较,然后提取文件2中未找到的集合;但是,我不知道如何保存这些数据,以便他们分组。这是数据外观的一个示例:Python 比较包含数据组的两个文本文件,python,file,compare,Python,File,Compare,我有两个包含数据组的文本文件。这些组由4行数据组成,每个组之间有一个空格。我试图将文件1中的集合与文件2中的集合进行比较,然后提取文件2中未找到的集合;但是,我不知道如何保存这些数据,以便他们分组。这是数据外观的一个示例: Data 1 Data 2 Number 1 Number 2 Data 1 Data 2 Number 1 Number 2 它重复着。以下是我到目前为止的情况: f1 = open("file 1.txt","r").readlines() f2 = open("fi
Data 1
Data 2
Number 1
Number 2
Data 1
Data 2
Number 1
Number 2
它重复着。以下是我到目前为止的情况:
f1 = open("file 1.txt","r").readlines()
f2 = open("file 2.txt","r").readlines()
diff = set(f1) - set(f2)
print diff
outFile = open("output.txt","w")
outFile.writelines(line for line in f1 if line in diff)
听起来您试图比较两个文件之间的行组,而不仅仅是文件中的行。在这种情况下,您需要自己将这些行组合在一起,然后像以前一样进行比较。假设组之间总是有一个空行(如您所发布的),下面的代码将读取其中一个文件。行上应该仍然有
\n
,因此打印出最终数据不需要任何特殊格式
allLines = open("file1.txt", 'r').readlines()
# this is the array you'll want to compare with
groupedLines = []
gLine = ""
for line in allLines:
# whenever you get a blank line, put the grouped line in the array
# and clear the grouped line
if line == "":
groupedLines.append(gLine)
gLine = ""
gLine += line
# don't forget to save the last grouping
groupedLines.append(gLine)
这应该行得通。但是,如果您的问题开始变得更加复杂,可能需要更复杂的解析器
text1 = """
Data 1
Data 2
Number 1
Number 2
Data 1
Data 2
Number 5
Number 6
"""
text2 = """
Data 1
Data 2
Number 1
Number 2
Data 1
Data 2
Number 3
Number 4
"""
from itertools import izip_longest
def grouper(iterable, n, fillvalue=None):
"""recipe from itertools docs"""
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
def line_group(text):
"""remove empty lines, and split per 4"""
return grouper((line for line in text.splitlines() if line), 4)
print set(line_group(text1)) - set(line_group(text2))
是否要查找文件1中不存在的行,然后查找要写入output.txt的行?我要查找文件2中不存在的行,然后将其写入outfile。现在发生的事情是,这些行将被提取,但它们不会在同一个数据集中保持在一起。我有一些东西,但我没有用集合来做,你想看看吗?你试过difflib吗?那太好了!谢谢你,T.C。!列表不能很好地使用优雅的基于集合的组减法。最好立即将组创建为可散列元组。