😽

Replacement Markerをカスタマイズ

2023/09/20に公開

背景情報

Pythonによくあるopen関数でファイルを開く、

例えば、cp932で、あるCSVファイルを開くは以下のようにお書きします。

open(csv_file_path, encoding="cp932", errors='replace')

errors='replace'というのは、エラーが発生する場合、replace処理が実行されます。
例えば、utf8のファイル、をcp932で開く場合、cp932に存在しない文字があった場合、エラーになるので、置換処理が実行されます。

何に置換される?
デフォルトでは、"?"という文字に置換されます。

何をやりたい

今回は置換用の文字:"?"を変更したい:
具体的に、もっと気づきやすい”■”にしたい。

実現方法

その場合、カスタマイズのエラーハンドルを登録することで実現できます。

import codecs

replace_char = '■'
def my_error_handler(exc):
    return ((exc.end - exc.start) * replace_char, exc.end)
codecs.register_error('my_error_handler', my_error_handler)

# ここでmy_error_handlerを利用する
open(csv_file_path, encoding="cp932", errors='my_error_handler')

https://docs.python.org/ja/3/library/codecs.html#codecs.register_error

以上です。
ご参考になれば幸いです。

Discussion