比较两个python文件?

2024-04-26 13:12:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我得比较两个文件。在

 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
     .                                                .
     .                                                .
     .                                                .

在它再次在file1中找到linestarts之前,我需要从linestarts到{}的行,即)从linestarts到“200”。以类似的方式从file2.txt也就是说)从“print”到“300”,然后比较file1和file2..即)300和10000,500和500是否相同。同样,这个过程将继续到文件的结尾,即)我必须从第二个linestartsfile1.txt中的第二个print行与file2.txt中的“500”进行比较。在

我是python新手。我可以只获取第一组file1并与第一组file2进行比较,但我需要在文件1中使用linestarts找到该行之前,从linestarts开始,以类似的方式从“print”到找到行并比较每组值之前……它应该像loop一样……我不太了解python循环。怎么做直到文件结束?在


Tags: 文件reporttxtfoo过程结尾方式code
2条回答

将两个文件读入列表,删除非数字行(linestartsprint),比较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

输出:

^{pr2}$

如果目的是比较分隔符之间的值,这是非常容易的。在

首先,获取数据:

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 

在您的示例中,将打印:

^{pr2}$

然后比较子列表:

print [x==y for x, y in zip(data1, data2)]  

印刷品:

[False, False, True]

如果分隔符之间的数据是字符串或数字,则此方法将有效。在

相关问题 更多 >