「仕様書のバージョンが複数あって、どこが変わったか分からない…」そんな経験はありませんか?
この記事では、Pythonを使って2つのファイルの差分を視覚的に比較できるツールの作り方を、実用コード付きでわかりやすく解説します。
この記事でわかること
- Pythonでファイルの差分を取得する方法(
difflib
の使い方) - 行単位での差分抽出・出力
- HTMLで差分を色付き表示するツール作成
- 実務での活用例(ソースコード・CSV・設定ファイルの比較など)
1. difflibとは?
Python標準ライブラリの difflib
は、2つのテキストの違いを比較・視覚化できる便利なモジュールです。
特に以下のような機能があります
- 行単位の差分比較(
ndiff
、unified_diff
) - 差分をHTML形式で出力(
HtmlDiff
) - 類似度のスコア算出(
SequenceMatcher
)
2. 差分チェックの基本コード(行単位)
まずは、2つのテキストファイルの差分をターミナル上で表示する基本コードです。
import difflib
def diff_files(file1_path, file2_path):
with open(file1_path, encoding='utf-8') as f1, open(file2_path, encoding='utf-8') as f2:
f1_lines = f1.readlines()
f2_lines = f2.readlines()
diff = difflib.unified_diff(
f1_lines, f2_lines,
fromfile='Before',
tofile='After',
lineterm=''
)
for line in diff:
print(line)
# 使用例
diff_files('old_version.txt', 'new_version.txt')
3. 差分をHTMLファイルで出力(色付き表示)
以下のコードは、2つのファイルの差分をHTML形式で保存します。ブラウザで開くと、色付きで変更箇所が一目瞭然です。
import difflib
def create_diff_html(file1_path, file2_path, output_html):
with open(file1_path, encoding='utf-8') as f1, open(file2_path, encoding='utf-8') as f2:
f1_lines = f1.readlines()
f2_lines = f2.readlines()
differ = difflib.HtmlDiff()
html_content = differ.make_file(f1_lines, f2_lines, fromdesc='Old Version', todesc='New Version')
with open(output_html, 'w', encoding='utf-8') as f:
f.write(html_content)
print(f"HTML差分ファイルを作成しました: {output_html}")
# 使用例
create_diff_html('old_version.txt', 'new_version.txt', 'diff_result.html')
4. 実務での活用例
用途 | 内容 |
---|---|
ソースコード管理 | 手動で変更されたファイルの確認、コードレビュー前の比較 |
ドキュメント差分 | 手順書や仕様書のバージョン比較(Wordをtxtで保存して利用) |
CSV比較 | 業務データの変更点を可視化(列の変化・削除検出) |
コンフィグファイル確認 | .ini , .yaml , .conf ファイルの差分確認 |
5. よくあるQ&A
Q. バイナリファイルは比較できますか?
→ できません。バイナリデータは行単位で比較できないため、binascii
やfilecmp
などを使った比較が必要です。
Q. 差分の文字コードが合わない場合は?
→ open()
関数に encoding='utf-8-sig'
や encoding='shift_jis'
を指定してみましょう。
6. カスタマイズ例:変更点だけ抽出する
行頭の記号(+
, -
, )で差分をフィルタできます。
for line in difflib.ndiff(f1_lines, f2_lines):
if line.startswith('+ ') or line.startswith('- '):
print(line)
まとめ
Pythonの difflib
を使えば、テキストベースのファイル差分チェックツールを簡単に作成できます。
- コードレビュー・資料チェックに最適
- HTML出力でチーム内共有もラク
- GUIなしでも業務で十分に使える品質
業務の見える化や品質チェックに、ぜひ導入してみてください。