【Python】difflibを使って2つのファイルの差分を行単位で比較する方法
はじめに
Pythonの標準ライブラリには、文字列やファイル間の差分(diff)を検出するために特化したモジュール「difflib」が用意されています。このモジュールの unified_diff 関数を呼び出すだけで、2つのファイルの内容を簡単に比較できます。
例として、以下のような内容を持つ2つのファイル file1 と file2 を考えてみましょう。
file1: Hello People of the world file2: Hello People from India
サンプルコード
これらのファイルの差分を取得するには、次のようなコードを使用します。
import difflib
with open('file1') as f1:
f1_lines = f1.read().splitlines()
with open('file2') as f2:
f2_lines = f2.read().splitlines()
# 差分を検出して表示する
for line in difflib.unified_diff(f1_lines, f2_lines, fromfile='file1', tofile='file2', lineterm=''):
print(line)
実行結果
上記のコードを実行すると、以下のような出力が得られます。
--- file1 +++ file2 @@ -1,5 +1,4 @@ Hello People -of -the -world +from +India
コードのポイント
read().splitlines()でファイルの内容を行のリストとして読み込んでいます。difflib.unified_diffは行のシーケンスを比較対象とするため、文字列をそのまま渡すと意図しない結果になる点に注意しましょう。fromfileとtofileには、出力ヘッダーに表示されるファイル名を指定します。lineterm=''は、各行末に余計な改行が付かないようにするための指定です。各行はprint()によって自動的に改行されます。
出力の読み方
ユニファイド形式の差分では、先頭に - が付いた行が元のファイル(file1)から削除された行、+ が付いた行が新しいファイル(file2)に追加された行を表します。また、先頭が半角スペースの行は、両方のファイルに共通して存在する変更されていない行です。
このように difflib を使えば、外部ツールに頼らずともPythonだけで手軽にファイル比較を実現できます。設定ファイルやログの変更確認など、さまざまな場面で活用できるので、ぜひ覚えておきましょう。
-
【保存版】Notepad++で2つのファイルを比較する方法|Compareプラグインの使い方を徹底解説
Notepad++は、Microsoft Windows向けの無料テキストエディタ兼コードエディタです。軽量で動作が速く、多くのプログラマーやライターに愛用されています。標準機能にはファイル比較は含まれていませんが、公式の「Compare」プラグインを導入すれば、2つのファイルを左右に並べて表示し、行単位の差分を色分きで一目瞭然に確認できます。本記事では、Compareプラグインのインストールから実際の比較操作まで、手順をわかりやすく解説します。 Compareプラグインとは Notepad++には、2つのファイルを比較するための専用プラグイン「Compare」が用意されています。ただし、初期
-
Windows 10で2つのフォルダ内のファイルを比較する方法【WinMergeの使い方】
フォルダ間でファイルを移動する際は、すべてのファイルが正確に移動・コピーされたことを必ず確認しましょう。コピーが不完全なまま放置すると、データ損失につながる恐れがあります。元のフォルダと新しいフォルダのファイルを目視で比較することも不可能ではありませんが、ファイル数が多い場合は現実的ではありません。そこで役立つのが、2つのフォルダ内のファイルを自動的に比較できるツールです。代表的なツールのひとつが無料アプリ「WinMerge」です。WinMergeを使えば、元のフォルダとの比較により、不足しているファイルを簡単に特定できます。この記事では、WinMergeを使って2つのフォルダ内のファイルを比