3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python標準 ConfigParser でキー名の大文字/小文字を維持する

Posted at

Python標準のライブラリ configparser でINIファイルの読み書きを行えます。
https://docs.python.org/ja/3/library/configparser.html

INIファイルとは、セクション・キー・値の構成からなる、設定ファイルなどに使われることがあるファイル形式です。
https://ja.wikipedia.org/wiki/INI%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB

configparserでは、デフォルトでキーの大文字/小文字を区別しない仕様になっています。

import configparser


ini_filename = "sample.ini"
"""INIファイルのなかみ
[General]
Name = hogehoge
"""

parser = configparser.ConfigParser()
parser.read(ini_filename)

""" 大文字/小文字/混在 どうであっても読み込める """
assert parser["General"]["Name"] == "hogehoge", "混在"
assert parser["General"]["name"] == "hogehoge", "小文字"
assert parser["General"]["NAME"] == "hogehoge", "大文字"

これはINIファイルの読み込み/書き込みのどちらにも作用します。

RawTherapeeというソフトで使われるサイドカーファイルがINIファイル風の中身になっており、
これを一括編集しようと思ったのですが、RawTherapeeのサイドカーファイルはキー名の大文字/小文字を区別しています。
そのため、ConfigParserクラスでそのまま編集/保存までしてしまうと、キー名がすべて小文字になってしまい、
RawTherapeeでちゃんと読み込めなくなる問題がありました。

これは ConfigParserインスタンスの .optionxform に適宜関数をセットしてやることで解決します。
読み書き時のキー名は、optionxform 関数で変換した結果が使われます。

したがって、つぎのように optionxform を設定してやると、キー名を維持したまま、INIファイルを保存できます。

parser = configparser.ConfigParser()
parser.optionxform = str
parser.read(ini_filename)

parser["General"]["Name"] = "test"

with open(ini_filename, "w") as fp:
    parser.write(fp)
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?