今回は、Pythonを使って2つのテキストファイルの差分を生成し、その結果をユニファイドDiff形式で出力する方法をご紹介します。この技術は、コードの変更履歴管理やテキスト比較に非常に役立ちます。
ユニファイドDiffは、テキストファイルの差分を表示するための標準的な形式です。この形式は、変更された行とその周辺のコンテキストを一緒に表示するため、変更内容を理解しやすくなっています。ユニファイドDiffの主な特徴は以下の通りです:
それでは、Pythonを使って差分ファイルを生成する方法を見ていきましょう。
import difflib
Pythonの標準ライブラリであるdifflib
モジュールを使用します。このモジュールは、シーケンス(文字列やリストなど)の差分を計算するための様々なツールを提供しています。
import difflib
def main():
# ファイルを読み込む
with open('はれ.txt', 'r', encoding='utf-8') as file1:
sunny_lines = file1.readlines()
with open('あめ.txt', 'r', encoding='utf-8') as file2:
rainy_lines = file2.readlines()
# ユニファイドdiffを生成
diff = difflib.unified_diff(sunny_lines, rainy_lines, fromfile='はれ.txt', tofile='あめ.txt')
# 差分をweather.diffファイルに書き込む
with open('weather.diff', 'w', encoding='utf-8') as f_diff:
f_diff.writelines(diff)
if __name__ == "__main__":
main()
このプログラムでは、以下の手順を実行しています:
if __name__ == "__main__":
を使用して、スクリプトが直接実行された場合にのみmain()
関数を呼び出すようにしています。リプトが直接実行された場合にのみmain()
関数を呼び出すようにしています。はれ.txt
とあめ.txt
)を読み込みます。difflib.unified_diff()
関数を使用して、ユニファイドDiffを生成します。weather.diff
ファイルに書き込みます。はれ.txtの内容:
textこんにちは。にいやんです。
今日は晴れです。
お疲れ様でした。
あめ.txtの内容:
textこんにちは。にいやんです。
今日は雨です。
お疲れ様でした。
生成されたweather.diffの内容:
text--- はれ.txt
+++ あめ.txt
@@ -1,3 +1,3 @@
こんにちは。にいやんです。
-今日は晴れです。
+今日は雨です。
お疲れ様でした。
生成されたユニファイドDiffを詳しく見てみましょう:
--- はれ.txt
と+++ あめ.txt
は、比較対象のファイル名を示しています。@@ -1,3 +1,3 @@
は、変更箇所の位置情報です。この場合、両ファイルの1行目から3行を表示していることを意味します。-今日は晴れです。
は、元のファイルから削除された行を示しています。+今日は雨です。
は、新しいファイルに追加された行を示しています。Pythonのdifflib
モジュールを使用することで、簡単にユニファイドDiff形式の差分ファイルを生成できることがわかりました。この技術は、バージョン管理システムやテキスト比較ツールの基礎となる重要な概念です。ユニファイドDiffを理解し、活用することで、コードの変更履歴を効率的に管理したり、ドキュメントの異なるバージョン間の違いを簡単に把握したりすることができます。
WinMergeで簡単に差分ファイルを生成したい方はこちら
差分をマージする方法はこちら
この記事が、あなたの役に立てば幸いです!