比较python中的两个文件?

时间:2014-02-07 15:34:40

标签: python file python-2.7 file-comparison filecompare

我必须比较两个文件。

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

我需要从linestartslinestarts再次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循环很多。怎么做到文件结尾?

2 个答案:

答案 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)

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

输出:

['100', '200', '300', '500', '600', '900']
['100', '300', '1000', '500', '600', '900']
False