スポンサーリンク
unified形式で差分を抽出
下記がサンプルコードになります。
in1.txtとin2.txtの差分をunified形式で抽出しています。
difflibをimportして、unified_diff()を実行しています。
$ cat sample.py #!/usr/bin/env python3 # coding: UTF-8 import difflib as diff with open('in1.txt','r') as f: str1 = f.readlines() with open('in2.txt','r') as f: str2 = f.readlines() print(str1) print(str2) for i in diff.unified_diff(str1, str2, fromfile='in1.txt', tofile='in2.txt'): print(i, end='')
下記が実行結果になります。
print出力の際は、end=''をprint()に設定しないと、改行が付与されて1行飛びになってしまいます。
参考:[Python]改行なしでprint出力する(end=''を設定)
$ ./sample.py ['line1,1\n', 'line2,9\n', 'line3,3\n', 'line4,7\n', 'line4,8\n'] ['line1,1\n', 'line2,9\n', 'line3,3\n', 'diff\n', 'line4,7\n', 'line4,8\n'] --- in1.txt +++ in2.txt @@ -1,5 +1,6 @@ line1,1 line2,9 line3,3 +diff line4,7 line4,8
スポンサーリンク
context形式で差分を抽出
context形式で差分を抽出する場合には、difflibをimportしてcontext_diff()を使います。
下記がサンプルコードになります。
$ cat sample2.py #!/usr/bin/env python3 # coding: UTF-8 import difflib as diff with open('in1.txt','r') as f: str1 = f.readlines() with open('in2.txt','r') as f: str2 = f.readlines() print(str1) print(str2) for i in diff.context_diff(str1, str2, fromfile='in1.txt', tofile='in2.txt'): print(i, end='')
下記が実行結果になります。
$ ./sample2.py ['line1,1\n', 'line2,9\n', 'line3,3\n', 'line4,7\n', 'line4,8\n'] ['line1,1\n', 'line2,9\n', 'line3,3\n', 'diff\n', 'line4,7\n', 'line4,8\n'] *** in1.txt --- in2.txt *************** *** 1,5 **** --- 1,6 ---- line1,1 line2,9 line3,3 + diff line4,7 line4,8
シェルのdiffコマンドを使う
diffコマンドが定番ですね。
参考:diffの-u/-c/-yオプションで表示形式を変更
diffコマンドの-uオプションでUnified形式で出力。
$ diff -u in1.txt in2.txt --- in1.txt 2019-02-16 19:52:37.000000000 +0900 +++ in2.txt 2019-04-30 19:55:59.000000000 +0900 @@ -1,5 +1,6 @@ line1,1 line2,9 line3,3 +diff line4,7 line4,8
diffコマンドの-cオプションでContext形式で出力。
$ diff -c in1.txt in2.txt *** in1.txt 2019-02-16 19:52:37.000000000 +0900 --- in2.txt 2019-04-30 19:55:59.000000000 +0900 *************** *** 1,5 **** --- 1,6 ---- line1,1 line2,9 line3,3 + diff line4,7 line4,8
スポンサーリンク