💭
PythonのConfigParserで%%を含む文字列を読み込んだら%になった
環境: Python3.8で確認しましたが、特にバージョンを限定せずに起きるかと
先に結論だけ書いておきますと、ConfigParserはデフォルトでBasicInterpolation()関数を使っているため、%%は%に変換されます。ConfigParser(interpolation=None)でベタ書きが読めるようになります。
ConfigParserでiniファイルを読み込んで実行するときに、ソースコードに直に書いたものと挙動が変わることがありました。
中身を覗いてみたところ、%%の部分が%と、一つ減っておりました。
本件についてTweetしたところ、@takanoryさんからコメントを頂きました。
要はConfigParserはデフォルトでBasicInterpolation()を使って%(home_dir)の様な文字列を変数として解釈しています。ExtendedInterpolationというのも指定できまして、こちらは${section:variable}の形式で変数として解釈される様です。
話を戻しまして、BasicInterpolationで%自体を読みたい場合は、%%と%を前に置くことで読み込みできます。元が%%なら%%%%ですね。
今回の場合はプログラムに詳しくない人がiniファイルに接続変数を書くことがあるため、interpolation=Noneをプログラム側で指定して下手に解釈されないようにしました。
Discussion