2014-02-07 131 views
-1

我必須比較兩個文件。比較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 
    .            . 
    .            . 
    .            . 

我需要從linestarts線將其從linestarts爲「200」再次開創了linestarts之前file1 .i.e)。以類似的方式從file2.txt中也可以從「print」打印到「300」,然後比較file1和file2..e.e)300和10000,500和500是否相同。同樣這一進程將繼續,直到file.i.e結束時)我不得不採取從第二linestarts線500 file1.txt並與在FILE2.TXT第二print行「500」進行比較。

我是新來的蟒蛇。我只能取第一套文件1與第一套文件2的比較,但我需要把每一套從linestarts線給它開創了符合linestarts file1中之前從「print」類似的方式找到的前並且必須比較每一組值...它應該像loop ...我不知道python循環太多。如何做到文件結尾?

+2

重複這種可能? https://stackoverflow.com/questions/19007383/compare-two-different-files-line-by-line-in-python – Vader

+0

沒有,如果不同@vader – user3116273

回答

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

此方法將工作,如果分隔符之間的數據是字符串或數字。

+0

不僅numbers..in DAT地方有機會「串」 – user3116273