2017-04-04 13 views
1

Pythonで2つのファイルを比較する必要があり、difflibを使用しています。私は別にndiffとしてからunified_diffで試しました。 2つのファイルの内容は一例hereごとに、簡単です:不正な行番号を持つ2つのファイルのPython difflib

File_1.txt:

User1 US 
User2 US 
User3 US 

File_2.txt:

User1 US 
User2 US 
User3 NG 

ここでは私のためを動作するコードです(正しい行番号なし):

出力は次のとおりです。

1 --- File_1.txt 
2 +++ File_2.txt 
3 @@ -1,3 +1,3 @@ 
4 User1 US 
5 User2 US 
6 -User3 US7 +User3 NG1 User1 US 
2 User2 US 
3 - User3 US4 ?  ^^ 
5 + User3 NG6 ?  ^^ 

行番号が間違っているようです。彼らは間違った行である行番号4から始まっているようです。出力で正しい行番号を取得する方法は

質問

ありますか? unified_diffため

答えて

0

ドキュメントは、パラメータnを取ると言う:

統合差分だけ変更されているラインプラス文脈の数行を示すのコンパクトな方法です。変更はインラインスタイルで表示されます(前/後別のブロックではなく)。コンテキスト行の数はnで設定され、デフォルトは3になります。コンテキスト行の数はnで設定され、デフォルトは3になります。また

、パラメータlineterm:改行を末尾に持っていない入力の場合

、出力が無い均一な改行になるよう""lineterm引数を設定します。

必要な出力を得るには、ラインターミネータをオフにして出力に戻す必要があります。また、ゼロにコンテキスト行を設定する必要があります。

import difflib 
import sys  

def dif_wr(d): 
    for i, line in enumerate(d): 
     sys.stdout.write('{} {}\n'.format(i + 1, line)) 

いくつかのサンプルコードファイルの代わりに文字列を使用して:

from StringIO import StringIO 

file1 = """User1 US 
User2 US 
User3 US""" 

file2 = """User1 US 
User2 US 
User3 NG""" 

dif2 = difflib.unified_diff(StringIO(file1).readlines(), 
          StringIO(file2).readlines(), 
          fromfile='File_1.txt', 
          tofile='File_2.txt', 
          n=0, 
          lineterm="") 
dif_wr(dif2) 

出力:

1 --- File_1.txt 
2 +++ File_2.txt 
3 @@ -3,1 +3,1 @@ 
4 -User3 US 
5 +User3 NG 
関連する問題