Python 学習、difflib
仕事で設計書を修正するとき、変更点を残さないといけないという要求があります。
例えば、いいねEntityをあいいじゃEntityに変更時、以下のように色と取り消し線を付けます。
修正する設計書と箇所が多すぎて、手動で処理の場合、時間がかかるし、ミス発生の恐れもあるので、 今回はPythonの標準ライブラリdifflibを使って、自動化で処理します。
difflibでSequenceMatcherというclassを使用して、 置き換え、追加、削除の部分を取得して、文字に色や取り消し線付けられるので、簡単なcodeで自動化実現できます。以下はcode抜粋です。
highlight_color = "5B9BD5"
font_name = "MS ゴシック"
matcher = SequenceMatcher(None, old_text, new_text)
text_list = []
for tag, i1, i2, j1, j2 in matcher.get_opcodes():
match tag:
case "equal":
text_list.append(TextBlock(InlineFont(rFont=font_name), new_text[j1:j2]))
case "replace":
text_list.append(TextBlock(InlineFont(rFont=font_name, color=highlight_color, strike=True), old_text[i1:i2]))
text_list.append(TextBlock(InlineFont(rFont=font_name, color=highlight_color), new_text[j1:j2]))
case "delete":
text_list.append(TextBlock(InlineFont(rFont=font_name, color=highlight_color, strike=True), old_text[i1:i2]))
case "insert":
text_list.append(TextBlock(InlineFont(rFont=font_name, color=highlight_color), new_text[j1:j2]))
cell.value = CellRichText(*text_list)
Pythonの便利さと強さを改めて実感しました!