<python>設定情報を別ファイルで管理

はじめに

poolbooyer.hatenablog.jp
poolbooyer.hatenablog.jp
これのpart3はコードのブラッシュアップを勧めているのでもうちょっとかかるかもしれないです。多分今週中には書きます(フラグ)


今回はpythonについてです
ソフトウェアとか作るときにパラメータがその時によって変化したりおんなじコードで複数の条件を使ってやりたいときあるじゃないですか

そういうときに色んな方法で管理することができると思います。
独自の形式作って読み込むところから作るのも有りだとは思うのですが、設定情報について扱う形式にiniけ形式があります。
pythonだとそれを簡単に扱えるんでそれについてメモ

そもそもiniとは

INIファイルは構造の単純なテキストファイルであり、設定ファイルのフォーマットとしてよく使われている。
(参照元:wikipedia
INIファイル - Wikipedia )

くわしいことはwikipediaみてください。
windowsを中心に設定情報の管理に使われてるみたいです。

なぜiniを使うの

そこにConfigParserがあったから

っていう単純な理由です。
というかini形式での記述をやるとセクションなども用いて考えることでとても記述が簡単になるからです。(自分比)

ConfigParserって

pythonで標準で使えるモジュールです。
これで簡単にiniから情報を取得できます。

実際に使ってみよう

下準備

今回は何かを見るviewerアプリの設定ファイルを読み込むっていう設定でやっていきます。
まずは設定ファイルを記述します。
設定ファイルには使用するユーザの名前,IDとviewerを使うときにスケールを調整(拡大表示)したときの倍率情報とwindowの場所の情報が入っているという仮定で行こないます
以下のような記述を行います。
#iniファイルのハイライト表示は非対応でした、する必要もないだろうけど

#ファイル名はtest.ini
#設定ファイル
#USERセクション
[USER]
name=okapi
id=poolbooyer

#viewerセクション
[VIEWER]
scale=1.0
position=center

この設定情報を今回は読み込んでいきます。

pythonで読み込むスクリプトを記述

実際に読み込むスクリプトを書いていきます。
まずはクラスを読み込みます

import ConfigParser

その後はオブジェクトを作ります。

inifile=ConfigParser.SafeConfigParser()

その後には読み込むファイルの場所を記述します。(アスタリスク内に記述)

inifile.read('******')

その後は実際に読み込んでいきます。section nameにはセクション名,data nameにはデータの名前を記述します。

hoge=inifile.get('section name','data name')

こんな流れでデータが取れます。

実際に取得してみよう

先述の設定ファイルの情報を取得するスクリプトを書いてみました
以下のようになります。

#coding:utf-8
import ConfigParser

#設定読み込むオブジェクトを生成
inifile=ConfigParser.SafeConfigParser()

#読み込むファイルを記述
inifile.read('./test.ini')

#USERセクションの情報を読み込んで変数に代入
user_name=inifile.get('USER','name')
user_id=inifile.get('USER','id')

#VIEWERセクションの情報を読み込んで変数に代入
view_scale=inifile.get('VIEWER','scale')
view_position=inifile.get('VIEWER','position')

print("USER data\n")
print("USER NAME:"+user_name+"\n")
print("USER ID:"+user_id+"\n")
print("VIEWER data\n")
print("VIEWER SCALE:"+view_scale+"\n")
print("VIEWER POSITION:"+view_position+"\n")

これを実行すると
f:id:poolbooyer:20180802132537p:plain
こんな感じで取得できます。

まとめ

これを使うことで設定情報をわかり易く管理できるようになります。
書き換えなんかはファイル操作使えばできるんでそれでやればいいのかなとぼんやり考えています。
#基本変更する必要のないものを記述する予定なのであんまり関係ないのですが
configparser便利です。標準で使えるのがとても使いやすくていいなぁと思いました。