2016-06-28 88 views
1

輸入文件,如下面的字段模式asMode|Date|Count|timestamp|status|insertTimeStamp如何忽略一個字段數據,同時比較兩個文件在python

test1.txt: 
HR|06/08/2016|3000|Thu Jun 09 2016|Complete|20160627020300 
HR|06/08/2016|2000|Thu Jun 09 2016|Complete|20160627020400 
HR|06/08/2016|1000|Thu Jun 09 2016|Complete|20160627020500 
test2.txt: 
HR|06/08/2016|3010|Thu Jun 09 2016|Complete|20160627070300 
HR|06/08/2016|2000|Fri Jun 09 2016|Complete|20160627080300 
HR|06/08/2016|1500|Thu Jun 09 2016|Complete|20160627090300 

現在,我的要求是這兩個文件之間的差異線比較,但是它應該忽略insertTimeStamp字段(最後一列數據)進行比較。

我試過下面的代碼。它工作正常,但它的逐行比較。有人可以建議我怎麼能比較我的代碼跳過insertTimeStamp字段?

在此先感謝您的幫助。

import difflib 
import sys 

with open('/tmp/test1.txt', 'r') as hosts0: 
    with open('/tmp/test2.txt', 'r') as hosts1: 
     diff = difflib.unified_diff(
      hosts0.readlines(), 
      hosts1.readlines(), 
      fromfile='hosts0', 
      tofile='hosts1', 
      n=0, 
     ) 
     for line in diff: 
      for prefix in ('---', '+++', '@@'): 
       if line.startswith(prefix): 
        break 
      else: 
       sys.stdout.write(line[1:]) 

回答

1

你可能只是切掉每行的最後一個元素,將它們傳遞到差速器功能

diff = difflib.unified_diff(
    ['|'.join(x.split('|')[:-1]) for x in hosts0.readlines()], 
    ['|'.join(x.split('|')[:-1]) for x in hosts1.readlines()], 
    fromfile='hosts0', 
    tofile='hosts1', 
    n=0, 
) 

行由行比較W/O使用difflib前:

with open('/tmp/test1.txt', 'r') as fh: 
    hosts1 = fh.readlines() 
with open('/tmp/test2.txt', 'r') as fh: 
    hosts2 = fh.readlines() 

for h1, h2 in zip(hosts1, hosts2): 
    if h1.split('|')[:-1] != h2.split('|')[:-1]: 
     print 'Lines are not the same!' 
+0

謝謝其給予o/p如下:HR | 06/08/2016 | 3000 | Thu Jun 09 2016 |完成 HR | 06/08/2016 | 2000 | Thu Jun 09 2016 |完成 HR | 06/08/2016 | 1000 | Thu Jun 09 2016 | Complet e HR | 06/08/2016 | 3010 | Thu Jun 09 2016 |完成 HR | 06/08/2016 | 2000 | Fri Jun 09 2016 |完成 HR | 06/08/2016 | 1500 | Thu Jun 09 2016 |完整但我預期的o/p是:HR | 06/08/2016 | 3000 | Thu Jun 09 2016 |完成| 20160627020300 HR | 06/08/2016 | 3010 | Thu Jun 09 2016 |完成| 20160627070300 HR | 06/08/2016 | 1000 | Thu Jun 09 2016 |完成| 20160627020500 HR | 06/08/2016 | 1500 | Thu Jun 09 2016 |完成| 20160627090300。 – user2531569

+0

對不起 - 它很難讀懂;你能描述一下這個問題嗎? –

+0

您提供的代碼只是修改o/p中的最後一個字段(insertTimeStamp)。但我的要求是將file1中的第1行與file2中的第1行進行比較,並將文件1中的第2行與文件2中的第2行進行比較,等等。但在比較期間,它應該忽略最後一個字段(insertTimeStamp)。例如。儘管最後一個字段(insertTimeStamp)不同,但兩個文件中的記錄2都可以從o/p中免除。 – user2531569