Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでデルタ(差分)を計算するには?difflibモジュールの使い方を解説


デルタ(差分)を計算したい場合、Pythonの標準ライブラリであるdifflibモジュールを利用するのが便利です。このモジュールには、シーケンス同士を比較するためのさまざまなクラスや関数が用意されており、テキストファイル同士の比較はもちろん、HTMLファイルの差分検出など幅広い用途に活用できます。

difflibモジュールを使用するには、まずPythonコードの先頭でインポートを行います。

import difflib

以下に、difflibモジュールでよく使われる主要なクラスと関数を紹介します。

クラス:difflib.SequenceMatcher

このクラスは、任意の型を持つ2つのシーケンスを比較するために使用します。柔軟な比較を実現するためのメソッドが多数用意されており、代表的なものは次のとおりです。

  • set_seqs(a, b) − 比較対象となる2つのシーケンスを設定します。内部では2番目のシーケンスに関する詳細情報が計算・キャッシュされるため、1つの共通シーケンスに対して複数のファイルを比較したい場合は、最初のシーケンスだけを繰り返し設定すると効率的です。

  • set_seq1(a) − 比較する1番目のシーケンスを設定します。

  • set_seq2(b) − 比較する2番目のシーケンスを設定します。

  • find_longest_match(alo, ahi, blo, bhi) − 1番目のシーケンスの範囲 [alo, ahi) と、2番目のシーケンスの範囲 [blo, bhi) の中から、最も長い一致ブロックを検索します。

  • get_matching_blocks() − 一致しているブロックのリストを取得します。各要素には、それぞれのシーケンスにおける開始位置と一致したサイズが含まれます。

  • ratio() − シーケンス全体の類似度を0.0〜1.0の範囲の浮動小数点数(float値)として返します。

サンプルコード

ここでは、2つの文字列を比較して類似度と一致ブロックを表示する例を見てみましょう。コンストラクタの第1引数に渡している lambda x: x == ' ' は、スペースを「ジャンク(無視する)文字」として扱うための指定です。

import difflib
myStr1 = 'Python Programming'
myStr2 = 'Python Standard Library'
seq_match = difflib.SequenceMatcher(lambda x: x==' ', myStr1, myStr2)
print("シーケンスの類似度は: " + str(round(seq_match.ratio(), 3)))
for match_block in seq_match.get_matching_blocks():
   print(match_block)

実行結果

シーケンスの類似度は: 0.488
Match(a=0, b=0, size=7)
Match(a=8, b=13, size=1)
Match(a=11, b=19, size=2)
Match(a=18, b=23, size=0)

実行結果から、2つの文字列の類似度は約0.488であることがわかります。また、get_matching_blocks() の出力には、各一致ブロックの開始位置(a、b)と一致した長さ(size)が含まれています。最後に表示される Match(a=18, b=23, size=0) はダミーの終端要素であり、一致ブロックの列挙が終了したことを示すものです。


  1. Pythonで選択ソートを実装する方法|仕組みとサンプルコードをわかりやすく解説

    この記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.x(およびそれ以前のバージョン)での実装方法について解説します。 選択ソートとは 選択ソートは、ソートされていない部分から最小の要素を繰り返し見つけ出し、先頭側へ移動させることで配列全体を整列していくアルゴリズムです。処理の過程で、対象の配列は次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーションでは、未ソートの部分配列から最小要素を取り出し、ソート済みの部分配列の末尾に追加していきます。 アルゴリズムの動作イメー

  2. Windowsで使えるPython開発用IDEおすすめ7選|PyCharmからAtomまで徹底解説

    Windows環境でPythonの開発を始めるとき、最初に悩むのが「どのIDE(統合開発環境)を選ぶべきか」という問題です。IDEはコードの編集・実行・デバッグなどをひとつのアプリケーションで完結できる強力なツールであり、選択次第で開発効率が大きく変わります。 本記事では、Windowsで利用できる代表的なPython対応IDEを厳選し、それぞれの特徴やメリットをわかりやすく解説します。 PyCharm PyCharmはJetBrains社が開発する、Python開発で最も人気のあるIDEのひとつです。無料のコミュニティ版と有料のプロフェッショナル版が用意されており、初心者からプロフェッショ