読者です 読者をやめる 読者になる 読者になる

やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

PythonでINIファイル読込

プログラミング

PythonWindowsのINIっぽい形式のファイルを読み込む方法を調べた。

成果物

GitHubIni.Read

使い方はGitHubリポジトリ参照。

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よりもかなり柔軟。しかし大文字と小文字の区別が中途半端なのが気になる。