2013-12-18 81 views
0

不同,我有兩個文件,其中包含以下幾行:在兩個文件中如何比較線相同或蟒蛇

file1: 
6.959999999: LOG_MOD_L0_RECEIVE_TXBRP_CONTROL(0, 
0x0059005f, 
0x0049006d, 
0x00b9008b, 
0x001300b9) 
7.959999999: LOG_MOD_L0_RECEIVE_TXBRP_Measure(1, 
0x0059005m, 
0x0049006d, 
0x04b9008b, 
0x001300b9) 

file2: 
6.959999999: 01_LOG_MOD_L0_RECEIVE_TXBRP_CONTROL(0, 
0x0059005f, 
0x0049006d, 
0x00b9008b, 
0x001300b9) 
7.959999999: LOG_MOD_L0_RECEIVE_TXBRP_Measure(1, 
0x0059005m, 
0x0049006d, 
0x04b9008b, 
0x001300b9) 

在此,如果我給輸入字符串的文件1爲「LOG_MOD_L0_RECEIVE_TXBRP_CONTROL」和「01_LOG_MOD_L0_RECEIVE_TXBRP_CONTROL」爲文件2.I要檢查的數據裏面存在相同或different.I意味着我要檢查

(0, 
0x0059005f, 
0x0049006d, 
0x00b9008b, 
0x001300b9) 

這個數據和

(0, 
0x0059005f, 
0x0049006d, 
0x00b9008b, 
0x001300b9) 

這些數據都是相同的或不相同的。

我的代碼是:

file1=open("C:\\Python27\\output1.txt","r") 
file2=open("C:\\Python27\\output2.txt","r") 
lines1=file1.readlines() 
lines2=file2.readlines() 

output1_string=raw_input("Enter the String of file1:") 
output2_string=raw_input("Enter the String of file2:") 
for line1 in lines1: 
    for line2 in lines2: 
     if line1==line2: 
     print "both are same" 
     else: 
     print "Different" 
+0

這可能會有所幫助:http://stackoverflow.com/questions/19007383/compare-two-different-files-line-by -線-in-python – Ketan

+0

這裏關注的重點是解析文件中的正確部分而不是比較,更好地理解文件結構丟失 –

+0

@guy缺少什麼結構? – user3082400

回答

1

兩個問題:

output1_string=raw_input("Enter the String of file1:") 
output2_string=raw_input("Enter the String of file2:") 

從未使用過,似乎毫無意義,但最重要的是:

same = set(file1).intersection(file2) 

需要閱讀內容的文件比較他們,你需要比較兩套沒有一套文件。

還有一個python庫爲你做這個 - 看看difflib

+0

'same = set(file1).intersection(file2)'沒有錯......如果OP沒有在它們上面使用'.readlines()':p –

1
#!/usr/bin/env python3 

import re 
lines1=open("output1.txt","rt").read() 
lines2=open("output2.txt","rt").read() 
hits1 = re.findall(r'\(.*?\)', lines1, re.DOTALL) 
hits2 = re.findall(r'\(.*?\)', lines2, re.DOTALL) 
print('equal:', set(hits1).intersection(hits2)) 
print('diff: ', set(hits1).difference(hits2)) 

打印出

equal: {'(0, \n 0x0059005f, \n 0x0049006d, \n 0x00b9008b, \n 0x001300b9)', '(1, \n 0x0059005m, \n 0x0049006d, \n 0x04b9008b, \n 0x001300b9)'} 
diff: set() 
1

您首先需要解決定位的權利,匹配部分的問題。下面發生器功能會產生你所尋找的部分信息:

def find_sections(filename, text): 
    with open(filename) as fin: 
     section = None 
     for line in fin: 
      if text in line: 
       section = line.rpartition('(')[-2:] 
       try: 
        while ')' not in line: 
         line = next(fin) 
         section.append(line) 
       except StopIteration: 
        pass # ran out of file to read 
       yield ''.join(section) 
      else: 
       previous = line 

爲了測試是否在這兩個文件中存在相同的數據,讀一個第一和收集在一個集合中的所有數據:

output1_string=raw_input("Enter the String of file1:") 
sections1 = set(find_sections("C:\\Python27\\output1.txt", output1_string)) 

現在,你可以通過做一個交集查找匹配的其他文件中的條目:

output2_string=raw_input("Enter the String of file2:") 
sections2 = find_sections("C:\\Python27\\output2.txt", output1_string) 
for match in sections1.intersection(sections2): 
    print 'Found a match:' 
    print match