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)