ここでは、configparser のモジュールを使って設定ファイルの読書きを行う方法を紹介します。
configparser は、Python 標準のモジュールです。(確認済み:v3.10.4)
python の configparser とは
configparser は、Microsoft Windows の INI ファイルに似たフォーマットの設定用言語を
読書き(Read/Write)できるようにする ConfigParser クラスを提供しています。
このクラスを使って、ユーザーが簡単に設定をカスタマイズできる Python プログラムを実装できます。
注意
configparser では、Windows のレジストリ用に拡張された INI 文法はサポート していません 。
扱える INI ファイルのフォーマット
扱える INI ファイルの構文では、Key(項目)と Value(値)のペアで各設定を記述し、
複数の設定をまとめて Section(章)として記述します。
設定の他に「#」を使ってコメントを記述することも可能です。
設定ファイル(INI形式)の読込
以下のような設定ファイルを読み込んでみましょう。
1 2 3 4 5 6 7 8 9 |
[default] config_num = 1 config_path = config.ini # comment [section] lang = python pkg_name = configparser |
必要なのは、たった3ステップ、3行です!
1 2 3 4 5 |
import configparser config = configparser.ConfigParser() config.read('config.ini') |
- import configparser で、ConfiParser のパッケージを読込む
- configparser.ConfigParser() のコンストラクタで、パーサーを生成
- 読込む設定ファイルパスを read() メソッドに渡して呼び出す
設定値の参照
ConfigParser のオブジェクトへ「dictionary(辞書)」風にアクセスすると、読込んだ値を参照できます。
参考
python 標準の辞書については、「辞書(dict)に要素を追加・削除・連結」をご覧下さい。
値へのアクセス方法
value = config[section][key]
または、
value = config[section].get(key)
それでは読込んだ値の一覧を表示してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
# get section list print('sections = ', config.sections()) # get value print('get(config_num) = ', config['default'].get('config_num')) # show value list for section in config.sections(): for key in config[section]: print("section={}, key={}, val={}, type={}".format( section, key, config[section][key], type(config[section][key]))) |
- メソッド:section()
セクションの一覧をリスト形式で取得できます。
for ~ in を使って、イテレーティブ処理も行うことができます。 - メソッド:get()
標準の辞書と同じように、get(key) メソッドを使っても値を参照できます。 - 辞書の要領で参照
dict[section][key] で値を参照します。
実行結果
$ python show_config.py
sections = ['default', 'section']
get(config_num) = 1
section=default, key=config_num, val=1, type=<class 'str'>
section=default, key=config_path, val=config.ini, type=<class 'str'>
section=section, key=lang, val=python, type=<class 'str'>
section=section, key=pkg_name, val=configparser, type=<class 'str'>
設定値の追加
設定値を追加する場合も dict(辞書)と同じように追加します。
1 2 |
config['common'] = {'add': 'python'} |
設定値の書出し
読込が簡単であったように、書出しも簡単に行えます。
設定値を追加した状態で、config2.ini へ書き出してみましょう。
1 2 3 |
with open('config2.ini', 'w') as fp: config.write(fp) |
config2.ini の中身
[default]
config_num = 1
config_path = config.ini
pkg_name = configparser
[section]
lang = python
name = sanachan
[common]
add = python
なんと 2 ステップ、2 行で書出し完了です。
まとめ
ポイント
- 設定値は dict 型(辞書)と同じようにアクセスできる
- read() / write() メソッドを使って、簡単に読書きできる