我有两个日志文件,其中包含以下行。我想比较这两个文件中的数据是否相同或不同。
从file1.txt
到736.199070736:
的{{1}}数据将其整理为一行。
会是这样的
0x000a00f5)
在736.199070736: LOG_MOD_L0_RECEIVE_TXBRP_CONTROL(0, 0x0075007f, 0x005500dd, 0x007f00d7, 0x0057005f, 0x00ff007d, 0x00f700dd, 0x00f50057, 0x000a00f5).
中,第一行是:
file2.txt
所以从这两个文件的第一行:
我想比较736.199047132: LOG_TXBP_MOD_IF_RSP_DPCCH(BlockNum: 0, 0x0075007f, 0x005500dd, 0x007f00d7, 0x0057005f, 0x00ff007d, 0x00f700dd, 0x00f50057, 0x000a00f5)
第一行的数据
(0,0x0075007f,0x005500dd,0x007f00d7,0x0057005f,0x00ff007d,0x00f700dd,0x00f50057,0x000a00f5)
和来自file1.txt
第一行的数据
(BlockNum:0,0x0075007f,0x005500dd,0x007f00d7,0x0057005f,0x00ff007d,0x00f700dd,0x00f50057,0x000a00f5)
我需要删除file2.txt
文字,然后进行比较。
File1.txt包含:
BlockNum:
'file2.txt'包含:
736.199070736: LOG_MOD_L0_RECEIVE_TXBRP_CONTROL(0,
0x0075007f,
0x005500dd,
0x007f00d7,
0x0057005f,
0x00ff007d,
0x00f700dd,
0x00f50057,
0x000a00f5)
736.209069960: LOG_MOD_L0_RECEIVE_TXBRP_CONTROL(0,
0x0075007b,
0x005500dd,
0x007f00d7,
0x0057005f,
0x00ff007d,
0x00f700dd,
0x00f50057,
0x000a00f1)
我的代码是:
736.199047132: LOG_TXBP_MOD_IF_RSP_DPCCH(BlockNum: 0, 0x0075007f, 0x005500dd, 0x007f00d7, 0x0057005f, 0x00ff007d, 0x00f700dd, 0x00f50057, 0x000a00f5)
736.209044558: LOG_TXBP_MOD_IF_RSP_DPCCH(BlockNum: 0, 0x0075007f, 0x005500dd, 0x007f00d7, 0x0057005f, 0x00ff007d, 0x00f700dd, 0x00f50057, 0x000a00f5)
这不能正确地比较我想要的东西。
答案 0 :(得分:1)
我从您的代码中了解到,将file1的第一行与file2中的所有行进行比较。
你真正想要做的是读取file1中的一行,如果它是不同的reutun“different”并完成,则将它与file2进行比较。否则,完成比较所有行并返回相等。
我不喜欢how to compare lines in two files are same or different in python中的答案,因为它们会加载内存中的所有文件。
我会做的是像
f1 = open("file1")
f2 = open("file2")
line1 = next(f1)
line2 = next(f2)
found_different = False
while line1 and line2:
if line1 != line2:
found_different = True
break
line1 = next(f1)
line2 = next(f2)
if not line1 and not line2 and not found_different:
print "equal"
else:
print "different"
答案 1 :(得分:1)
不要只是逐行阅读文件,而是过滤每一行:在(
)
中提取内容,如果存在则删除BlockNum:
。像这样:
def getRecords(fn):
for line in open(fn, 'r'):
entry = line.rstrip()[line.find('(')+1:-1]
if entry.startswith('BlockNum:'):
yield entry[10:]
else:
yield entry
import itertools
filesAreEqual = all(a == b for a, b in itertools.izip(getRecords("file1.txt"),
getRecords("file2.txt")))
答案 2 :(得分:0)
您的问题是在第二个for
循环中,您说:
if line==line2:
当它需要时:
if line1==line2:
由于不知道line
是什么,因此会出错。经过测试,这是经过纠正的代码。
fin1=open("file1.txt","r")
fin2=open("file2.txt","r")
for line1 in fin1:
for line2 in fin2:
if line1==line2:
print "same data"
else:
print "data are different"
fin1.close()
fin2.close()
快乐的编码!