我必须比较两个文件。
file1.txt contains: file2.txt contains:
result result
linestarts print
100 100
report foo
200 300
linestarts print
300 1000
500 500
code code
linestarts print
600 600
900 900
. .
. .
. .
我需要从linestarts
到linestarts
再次file1
linestarts
之前从linestarts
到“200”。以类似的方式从file2.txt中取出,即从“print”到“300”,然后将file1与file2..i.e进行比较)300和10000,500和500是否相同。同样,这个过程将一直持续到文件结束。我必须从file1.txt
中的第二个print
到第500个行,并在第二个linestarts
行中与“500”进行比较FILE2.TXT。
我是python的新手。我只能获取第一组file1并与第一组file2进行比较,但是我需要从linestarts
开始,然后才能在file1中找到print
的行,并且类似于“loop
”之前它找到了行并且必须比较每组值...它应该像{{1}} ...我不知道python循环很多。怎么做到文件结尾?
答案 0 :(得分:1)
如果目的是比较分隔符之间的值,那很容易。
首先,获取数据:
with open('/tmp/file1.txt') as f1, open('/tmp/file2.txt') as f2:
f1.readline()
f2.readline()
sep1=f1.readline()
sep2=f2.readline()
txt1=f1.read()
txt2=f2.read()
data1=[e.strip().splitlines() for e in txt1.split(sep1)]
data2=[e.strip().splitlines() for e in txt2.split(sep2)]
print data1
print data2
通过您的示例,将打印:
[['100', '200'], ['300', '500'], ['600', '900']]
[['100', '300'], ['1000', '500'], ['600', '900']]
然后只是比较子列表:
print [x==y for x, y in zip(data1, data2)]
打印:
[False, False, True]
如果分隔符之间的数据是字符串或数字,则此方法将起作用。
答案 1 :(得分:0)
将这两个文件读入列表,删除非数字行(linestarts
和print
),比较filtered列表。
def numeric(s):
try:
int(s)
return True
except:
return False
f1 = filter(numeric, open("file1.txt").read().split("\n"))
f2 = filter(numeric, open("file2.txt").read().split("\n"))
print f1
print f2
print f1 == f2
输出:
['100', '200', '300', '500', '600', '900']
['100', '300', '1000', '500', '600', '900']
False