今回は、Pythonを使って2つのテキストファイルの差分を生成し、その結果をユニファイドDiff形式で出力する方法をご紹介します。この技術は、コードの変更履歴管理やテキスト比較に非常に役立ちます。
ユニファイドDiffとは
ユニファイドDiffは、テキストファイルの差分を表示するための標準的な形式です。この形式は、変更された行とその周辺のコンテキストを一緒に表示するため、変更内容を理解しやすくなっています。ユニファイドDiffの主な特徴は以下の通りです:
- 変更されたファイルの名前を表示
- 変更された行の周辺のコンテキストを含む
- 追加された行は「+」、削除された行は「-」で表示
- 変更のない行はそのまま表示
Pythonでの実装
それでは、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()
関数を呼び出すようにしています。- 2つのテキストファイル(
はれ.txt
とあめ.txt
)を読み込みます。 difflib.unified_diff()
関数を使用して、ユニファイドDiffを生成します。- 生成された差分を
weather.diff
ファイルに書き込みます。
入力ファイルと出力結果
入力ファイル
はれ.txtの内容:
textこんにちは。にいやんです。
今日は晴れです。
お疲れ様でした。
あめ.txtの内容:
textこんにちは。にいやんです。
今日は雨です。
お疲れ様でした。
出力ファイル
生成されたweather.diffの内容:
text--- はれ.txt
+++ あめ.txt
@@ -1,3 +1,3 @@
こんにちは。にいやんです。
-今日は晴れです。
+今日は雨です。
お疲れ様でした。
ユニファイドDiffの解説
生成されたユニファイドDiffを詳しく見てみましょう:
--- はれ.txt
と+++ あめ.txt
は、比較対象のファイル名を示しています。@@ -1,3 +1,3 @@
は、変更箇所の位置情報です。この場合、両ファイルの1行目から3行を表示していることを意味します。- 変更のない行はそのまま表示されます。
-今日は晴れです。
は、元のファイルから削除された行を示しています。+今日は雨です。
は、新しいファイルに追加された行を示しています。
まとめ
Pythonのdifflib
モジュールを使用することで、簡単にユニファイドDiff形式の差分ファイルを生成できることがわかりました。この技術は、バージョン管理システムやテキスト比較ツールの基礎となる重要な概念です。ユニファイドDiffを理解し、活用することで、コードの変更履歴を効率的に管理したり、ドキュメントの異なるバージョン間の違いを簡単に把握したりすることができます。
WinMergeで簡単に差分ファイルを生成したい方はこちら
差分をマージする方法はこちら
この記事が、あなたの役に立てば幸いです!
コメント