[python] difflibを使って、2つのCSV的な構造の変更箇所を取得する

[“1,2,3″,”2,3,4”] と [“1,2,3″,”2,3,4″,”5,6,7”] のようなcsvの構造2つの差を検索するような事を
pythonで出来ないものかと試してみました。

とりあえずテストそーす

このスクリプトの結果は

こんな感じになります。

まず、pythonでdiffをするには difflib を使用します。
difflib.ndiff(a,b) は、引数に与えた配列2つのdiffをジェネレートしてくれる関数です。

ジェネレートした結果はこんな感じになります。
ndiffでdiffを取ると、頭の文字2つがコードとして扱われます。

”  ” -> 変化無し
“+ ” -> 追加
“- ” -> 削除
“? ” -> 変更があった場所の表示(その他の行)

今回は ndiffを使用していますが、difflibには、
これ以外にもcontext_diffやunified_diffのような形式のdiffもあります。

単純に追加・削除だけならばいいのですが、
行のうち1カ所が修正されているようなパターンも拾いたいので無理矢理やりやってみました。
変更の場合は

–  変更まえ
? 変更箇所表示
+ 変更後
? 変更箇所表示

このように4行で表されます。
「なので、reverse()で反転して、?がきたあと4つは変更行の表示である」
と言うことにして、変更前・変更後を比較して、変更してある行のコードを ? にして
変更した場所に ! をつけてみるようにしました。

とりあえずやりたい事は出来たのですが、もっとやりかたあるんじゃね?という気がしてなりません(汗
まぁとりあえず最初は出来ればいいやって事で。

 

最近旅してないせいで、Blogがまじめだなぁ…

コメントを残す

メールアドレスが公開されることはありません。


*