PythonでINIファイル読込
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よりもかなり柔軟。しかし大文字と小文字の区別が中途半端なのが気になる。