Python

【Python】第6章第13回:ファイルの差分比較ツールの作成

本記事では、Pythonを使用してファイルの差分を比較するツールを作成する方法を解説します。主にテキストファイルの内容を効率的に比較し、変更点を特定する技術を学びましょう。

0. 記事の概要

この記事を読むメリット

  • ファイル比較の基礎を理解:テキストやコードファイルの変更点を簡単に検出できます。
  • ツール作成スキルの向上:Pythonで実用的なツールを作成する技術を習得できます。
  • 作業効率の向上:差分比較ツールを利用して手作業を減らせます。

この記事で学べること

  • 差分比較の基礎知識
  • Pythonでのファイル比較ツールの作成方法
  • diffライブラリの活用例とエラー処理

1. ファイルの差分比較とは?

1.1 差分比較の概要

ファイルの差分比較とは、2つのファイルの内容を比較して、どの部分が異なるかを特定するプロセスです。以下のような用途で使用されます。

  • コードレビューでの変更点の確認
  • バージョン管理システムの変更履歴比較
  • テキストや設定ファイルの差分解析

1.2 差分比較の主な手法

  • ライン単位の比較:テキストの各行を比較し、追加・削除された行を検出。
  • 文字単位の比較:行内の文字列の違いを詳細に解析。

2. Pythonで差分比較ツールを作成する

2.1 difflibモジュールを活用する

# 2つのテキストファイルを比較する
import difflib

with open("file1.txt", "r") as file1, open("file2.txt", "r") as file2:
    file1_lines = file1.readlines()
    file2_lines = file2.readlines()

diff = difflib.unified_diff(file1_lines, file2_lines, lineterm="")
print("差分比較結果:")
print("\\n".join(diff))

2.2 差分結果をファイルに保存

# 差分結果をファイルに出力
with open("diff_result.txt", "w") as diff_file:
    diff = difflib.unified_diff(file1_lines, file2_lines, lineterm="")
    diff_file.write("\\n".join(diff))
print("差分結果がdiff_result.txtに保存されました")
動作解説
  1. difflib.unified_diff()を使用して差分結果を生成します。
  2. 各行を比較し、変更点が分かる形式(統一形式diff)で出力します。
  3. 出力結果はターミナルやファイルに保存できます。

3. 応用例:HTML形式で差分を出力する

3.1 HTML差分レポートを生成

# HTMLファイルに差分結果を出力
from difflib import HtmlDiff

with open("file1.txt", "r") as file1, open("file2.txt", "r") as file2:
    file1_lines = file1.readlines()
    file2_lines = file2.readlines()

html_diff = HtmlDiff().make_file(file1_lines, file2_lines)
with open("diff_report.html", "w") as html_file:
    html_file.write(html_diff)
print("差分結果がHTML形式でdiff_report.htmlに保存されました")
動作解説
  1. HtmlDiff.make_file()を使用して、HTML形式の比較結果を生成します。
  2. HTML形式の出力は、視覚的に変更点を確認しやすい形式です。

4. 練習問題

以下の課題に挑戦してみましょう。

  1. 2つのテキストファイルを比較し、差分結果をターミナルに出力してください。
  2. 差分結果をファイルに保存するプログラムを書いてください。
  3. HTML形式で差分レポートを作成するプログラムを作成してください。

5. 練習問題の解答と解説

問1〜3の解答例

# 問1: 差分結果をターミナルに出力
import difflib

with open("file1.txt", "r") as file1, open("file2.txt", "r") as file2:
    file1_lines = file1.readlines()
    file2_lines = file2.readlines()

diff = difflib.unified_diff(file1_lines, file2_lines, lineterm="")
print("\\n".join(diff))

# 問2: 差分結果をファイルに保存
with open("diff_output.txt", "w") as diff_file:
    diff_file.write("\\n".join(diff))

# 問3: HTML形式の差分レポートを生成
from difflib import HtmlDiff

html_diff = HtmlDiff().make_file(file1_lines, file2_lines)
with open("diff_report.html", "w") as html_file:
    html_file.write(html_diff)

6. まとめ

本記事では、Pythonのdifflibモジュールを活用してファイルの差分比較ツールを作成する方法を学びました。作成したツールをプロジェクトや業務で活用し、作業効率を向上させてください。