PythonでWindowsのINIっぽい形式のファイルを読み込む方法を調べた。
成果物
git_up.ini
# -*- coding: utf-8 -*- # コメントのつもり [GitHub] Username=user1 [SQLite] Apis="./GitHub.Apis.sqlite3" Accounts="./GitHub.Accounts.sqlite3" Repositories="./GitHub.Repositories.{username}.sqlite3"
こんな感じのファイルを読み込む。
IniRead.py
#!python3 #encoding:utf-8 import configparser config = configparser.ConfigParser() config.read('./git_up.ini') print(config['GitHub']['Username']) print(config['SQLite']['Apis']) print(config['SQLite']['Accounts']) print(config['SQLite']['Repositories'])
上記のコードで読み取れる。
重複エラー
iniファイルは以下のように同じキーがあるとエラーになった。
Repositories="./GitHub.Repositories.{username}.sqlite3" Repositories="a"
Traceback (most recent call last): File "IniRead.py", line 5, in <module> config.read('./git_up.ini') File "/usr/lib/python3.4/configparser.py", line 672, in read self._read(fp, filename) File "/usr/lib/python3.4/configparser.py", line 1070, in _read fpname, lineno) configparser.DuplicateOptionError: While reading from './git_up.ini' [line 9]: option 'repositories' in section 'SQLite' already exists
DuplicateOptionError
とあるので重複エラーとわかる。気になるのはキー名が'repositories'
と小文字で表示されていること。セクション名は'SQLite'
と大文字のままなのに。
キー名は大文字と小文字の区別をしない
以下のようにしても同様のエラーだった。
Repositories="./GitHub.Repositories.{username}.sqlite3" repositories="a"
つまり、「キー名は大文字と小文字の区別をしない」ということ。
セクション名は大文字と小文字の区別をする
ついでにセクション名についても確認した。
[SQLite] a=a [sqlite] a=b
なぜか「セクション名は大文字と小文字の区別をする」ようだ。
python参照
これはPythonから参照するときも同じである。セクション名は大小文字区別をしないと以下のようにエラーになる。
print(config['sqlite']['repositories'])
Traceback (most recent call last): File "IniRead.py", line 9, in <module> print(config['sqlite']['repositories']) File "/usr/lib/python3.4/configparser.py", line 937, in __getitem__ raise KeyError(key) KeyError: 'sqlite'
しかし、キー名は大小文字区別せず指定できてしまう。
仕様
こちらを見ると、その旨が書いてある。また、複数行、セクションのネスト構造、参照をサポートしているらしい。
所感
WindowsのINIよりもかなり柔軟。しかし大文字と小文字の区別が中途半端なのが気になる。