用意したjsonファイルを'difflib'を用いて差分抽出
json:Data1.json
1{ 2 "テキストA": "テキストa", 3 "テキストB": "テキストb", 4 "テキストC": "テキストc", 5 "テキストD": "テキストd", 6 "テキストE": "テキストe" 7}
json:Data2.json
1{ 2 "テキストZ": "テキストz", 3 "テキストA": "テキストa", 4 "テキストB": "テキストb", 5 "テキストC": "テキストc", 6 "テキストD": "テキストd" 7}
Data1.json
とData1.jsonをもとに上に行を追加 + 追加した行の数だけ下から削除した、
Data2.json
を比較して以下のように差分を抽出しました。
python
1import os 2import difflib 3 4path1 = 'Data1.jsonのパスを指定' 5path2 = 'Data2.jsonのパスを指定' 6 7file1 = open(path1) 8file2 = open(path2) 9diff = difflib.Differ() 10 11output_diff = diff.compare(file1.readlines(), file2.readlines()) 12 13for data in output_diff : 14 15 if data[0:1] in ['+', '-'] : 16 print(data) 17 18file1.close() 19file2.close() 20 21# 以下 抽出された内容 22# + "テキストZ": "テキストz", 23# - "テキストD": "テキストd", 24# + "テキストD": "テキストd" 25# - "テキストE": "テキストe"
実際に抽出したい内容は、- "テキストZ": "テキストz",
と+ "テキストE": "テキストe"
のみですが、
末尾のカンマの影響により- "テキストD": "テキストd"
+ "テキストD": "テキストd",
は一致していても差分として抽出されてしまいます。
対応策として以下を思いつきましたがそれぞれ問題がありました。
①jsonファイルの末尾にカンマを追加する → 文法上良くない
②最終行のみ差分が一致しなくても抽出しないようにする → カンマ以外に差異がある場合も無視してしまう
同じようなつまずきよくある気がしたため検索してみましたが同様の問題見つからず、
一応、一度抽出した差分に対して,
-
+
を置換してから再度差分抽出する方法は思いつきましたが、コードが複雑になり一般的な方法のようには思えませんでした。
こちらについてよくある問題な気がするため一般的な表記方法やメソッドなどがあるようでしたらお伺いしたく質問させていただきました。
ご回答のほどよろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー