Pythonでコンフィグファイルを簡単に読み込むライブラリを作った
はじめに
Pythonでアプリケーションを作成する際に、
設定やパラメータをini
やjson
, yaml
形式のコンフィグファイルで持つことが多いと思います。
そのコンフィグファイルを簡単に読み込めるライブラリ: confile
を作成しました!
インストール
インストールはpipで行います。
pip install confile
使用方法
使用例
下記はデータベースの接続情報が記述されたiniファイルの例です。
[mysql]
host=localhost
port=3306
user=user
password=password
db=db
使い方はread_config
でファイルを読み込み、get_property
, to_dict
で値を取得します。
>>> import confile
# MySQL接続用
>>> import pymysql
>>> db_config = confile.read_config('database.ini')
>>> db_config.get_property('mysql', 'host')
'localhost'
>>> db_config.get_property('mysql', 'port')
3306 # int型で返却
>>> db_config.get_property('mysql')
{'host': 'localhost', 'port': 3306, 'user': 'user', 'password': 'password', 'db': 'db'}
>>> db_config.to_dict()
{'mysql': {'host': 'localhost', 'port': 3306, 'user': 'user', 'password': 'password', 'db': 'db'}}
# MySQLに接続
>>> conn = pymysql.connect(**db_config.get_property('mysql'))
ネストの深いコンフィグファイル
ネストのコンフィグファイルから値を取り出す例です。
{
"nest1": {
"nest2": {
"nest3": "OK"
}
}
}
>>> nested_config = confile.read_config('nest.json')
>>> nested_config.get_property('nest1')
{'nest2': {'nest3': 'OK'}}
>>> nested_config.get_property('nest1', 'nest2')
{'nest3': 'OK'}
>>> nested_config.get_property('nest1', 'nest2', 'nest3')
'OK'
>>> nested_config.to_dict()
{'nest1': {'nest2': {'nest3': 'OK'}}}
特殊な拡張子
ファイル種別の判別に拡張子を利用しています。そのためcnf
・conf
・cfg
のような拡張子の場合、明示的にファイルの種別を指定します。
>>> config = confile.read_config('db.conf', file_type='ini')
file_type
にはini
, json
, yml
, yaml
の指定可能です。
既存ライブラリとの違いと本ライブラリの特徴
ビルドイン・サードパーティのライブラリを用いることでコンフィグファイルを読み込みは可能です。
本ライブラリも内部で使用しています。
種別 | ライブラリ |
---|---|
ini | configparser |
json | column |
yaml | PyYAML |
本ライブラリの特徴は下記の2つです。
インターフェースの統一
コンフィグファイルの種別にかかわらずread_config
でコンフィグファイルを読み込み、
get_property
, to_dict
で値の取得が可能です。
型の自動判別
configparserのページより
Config parser は値のデータ型について何も推論せず、常に文字列のまま内部に保存します。他のデータ型が必要な場合は自分で変換する必要があります
特にiniファイルのおいては、どのデータ型で扱いたいか意識しておく必要があります。
下記はconfigparserを利用して、上記のdb.ini
を読み込んだ例です。
>>> import configparser
>>> config = configparser.ConfigParser()
>>> config.read('db.ini')
# portを出力
>>> config.get('mysql', 'port')
'3306' # str型で返却
>>> config.getint('mysql', 'port')
3306 # int型で返却
本ライブラリではデータ型についてはast
を利用して推論を行っています。
コンフィグファイル
下記の3ファイルは本ライブラリから読み込むことで、同じ結果を返却します。
[test]
string = string
int = 0
float = 0.0
date = 2001-01-23
boolean_true = True
boolean_false = False
list = ['a' ,'b', 'c']
dict = {'a': 1, 'b': 2, 'c': 3}
{
"test": {
"string": "string",
"int": 0,
"float": 0.0,
"date": "2001-01-23",
"boolean_true": true,
"boolean_false": false,
"list": [
"a",
"b",
"c"
],
"dict": {
"a": 1,
"b": 2,
"c": 3
}
}
}
test:
string: string
int: 0
float: 0.0
date: 2001-01-23
boolean_true: True
boolean_false: False
list:
- a
- b
- c
dict:
a: 1
b: 2
c: 3
iniファイルは読み込む際にast
を利用しているため、Pythonの記法を利用することでリスト・辞書を表現できます。
おわりに
コンフィグファイルを読み込むためのライブラリを作成しました。
初めてのライブラリを作成しため、おかしなところもあると思いますがぜひ利用してみてください!
GitHub
編集履歴
- 加筆修正(2020年09月08日)
Author And Source
この問題について(Pythonでコンフィグファイルを簡単に読み込むライブラリを作った), 我々は、より多くの情報をここで見つけました https://qiita.com/777nancy/items/14284594a784b6e97820著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .