OS関係
ファイル
configparser
数学・科学
出力
その他
|
Python初期設定ファイル (ConfigParser)ここでは,Python で初期設定ファイルを取り扱う「ConigParser」について,説明します. 目次configparser とは概要Python を用いて処理を行うとき,処理の仕方をファイルで設定したい場合があります.Windows の場合,初期設定ファイル(*.INI,INIファイルと呼ばれる)にパラメーターが書かれます.Python のモジュール configparser は,この INI ファイルを読むために使われます.もちろん,Python が動作する環境であれば,Windows に限らず,どのようなプラットフォームでも動作します. 私は,計算のインプットファイルの読み込みに,configparser を使うことがあります.結構便利です.計算のインプットファイルのフォーマとを決めて,それを読み込む処理は結構大変です.configparser を使うと,とても簡単になります. 何ができるのかconfigparser を使うとフォーマットに従ったファイルをコマンドひとつで読み込むことができます.具体的には,以下のようなファイルを読み込むことができます.読み込んだファイルは,辞書型で格納されます.したがって,簡単にデータにアクセスできます. [Physical constant] particle: electron mass: 9.1093e-31 charge: 1.6021e-12 [Initial Condition] E0: 20e3 z0: 0.123 [Potential] z: 0.0 1.1 3.5 4.5 phi: 0.0 1.5e3 3.5E3 6.5E3 用語の説明表1 に,ここでの説明に使う用語の定義を示します.
ファイルと読み込みここでは,configparser で読み込むファイルのフォーマットを示し,実際の読み込みを行います.大体の使い方が理解できるでしょう. ファイルのフォーマット読み込みファイルは,指定のフォーマットで書かれたテキストファイルです.リスト1に,その具体例を示します.ファイルのフォーマットには以下の規則があります.
# 行頭が (# or ;) の場合,その行はコメントになります. [Section 1] key 1: value key 2: value [Section 2] key3 = value 簡単な例単純な例ですが,configparser の動作を理解するために,リスト3のファイルを読み込みます.このファイルには,二つのセクション('Basic Info', 'Interest')があります,それぞれセクションは,キー(name, address, birthday, height), ('interest', 'language')を持ちます.そして,セクションとキーに紐付けられた値があります.セクションとキー,値の関係は説明するまでもないでしょう. # configparser を使ったインプットファルの例
[Basic Info]
Name: Masashi Yamamoto
Address: Tokyo, Japan
Birthday: 1963.2.15
Height: 173.5
[Interest]
Internet: WEBサイト作成
Language: Python
このファイルを読み込むプログラムは,とても簡単です.リスト4にプログラム例を示します.002行目で configparser をインポートします.004行目でインスタンスを作成し,005行目でファイルを読み込みます.たった2行で,ファイルを読みが完了です.読み込んだデータは,dat['Basic Info']['name'] で呼びすことできます.セクションとキーで構成される辞書ですね. セクションのリストはdat.sections(),キーのリストは[key for key in dat['Basic Info']のようにして得ることができます.リスト 4 の 007 – 008 行目あたりでは,このようにしてセクションとキーを得ています.そして,009 行目でセクションとキー,紐付けられた値を表示します.簡単にファイルの値を読み込むことができます. 001 #!/usr/bin/python3 002 import configparser 003 004 dat = configparser.ConfigParser() 005 dat.read('yamamoto.dat') 006 007 for section in dat.sections(): 008 for key in dat[section]: 009 print('{0:s} > {1:s}:\t{2:s}'.\ 010 format(section, key, dat[section][key])) 以下に,このプログラムの実行結果を示します.こここの実行結果から分かりませんが,全ての値は文字列です.例えば,実行結果で表示されている 173.5 も文字列 '173.5' です.値は文字列であることに注意が必要です.「そんなの困るやんけ」という人のために,数値を読み込む方法を次節で説明します. $ python3 simple.py Basic Info > name: Masashi Yamamoto Basic Info > address: Tokyo, Japan Basic Info > birthday: 1963.2.15 Basic Info > height: 173.5 Interest > internet: WEBサイト作成 Interest > language: Python 実用的な読み込み先に示したように,configparser で読み込んだファイルの内容(値)は文字列型として辞書に格納されます.数値や複数の数値を読む場合には,少しばかりの工夫が必要です.文字列を読み込んだ後に,後処理で数値などに変換します.ここでは簡単な例を示します. 数値の読み込みconfigparser で数値を読み込みたい場合があります.例えば,以下のファイル中の整数(1)と浮動小数点数 (1.00794) です. [hydrogen] symbol: H number: 1 weight: 1.00794 configparser では数値を読み込むことができないので,読み込んだ文字列を数値に変換する必要があります.configparser には変換 (文字列 → 数値) の仕組みが,getint() と getfloat() というメソッドが用意されています. 以下,これらのメソッドを使った具体例を示します. 001 #!/usr/bin/python3 002 import configparser as config 003 004 atom = config.ConfigParser() 005 atom.read('numeric.dat') 006 007 print("{0:s}".format(atom['hydrogen']['symbol'])) 008 print("{0:d}".format(atom.getint('hydrogen','number'))) 009 print("{0:f}".format(atom.getfloat('hydrogen','weight'))) 8行目と9行目で,整数あるいは浮動小数点数に変換します.実行結果は以下のとおりです. $ python3 read_num.py H 1 1.007940 ブール値の読み込みメソッド「getboolean()」は,指定されたセクション中のキーの文字列をブール値に型変換します.True あるいは False を返す文字列は以下の通りです.大文字と小文字の区別はありません.他のいかなる値も ValueError を送出します.
以下のファイルを読み込んで,ブール値を返すプログラムを作成します.ファイル中のすべての値は,ブール値 (True or False) です. [Masashi] female: 0 have job: yes Japanese: true PC sw: off これも先に示した整数や浮動小数点表示の場合と同じで,値を文字列として読み込んだ後に,ブール値に変換します.変換に使うメソッドは「getboolean(セクション,キー)」です.以下に,具体的なプログラムを示します. 001 #!/usr/bin/python3 002 import configparser as config 003 004 person = config.ConfigParser() 005 person.read('bool.dat') 006 007 for section in person: 008 for key in person[section]: 009 print(section, ' > ', key, ': ', person.getboolean(section,key)) 009行目の person.getboolean(section,key) で文字列をブール値に変換します.その他の部分は説明するまでもないでしょう. プログラムの実行結果を以下に示します.ブール値 (True or False) に変換されることが理解できます. $ python3 read_bool.py Masashi > female : False Masashi > have job : True Masashi > japanese : True Masashi > pc sw : False リストの読み込みconfigparser が読み込む値は単純な文字列なので,リストを読み込むことはできません.この場合も前節で示したように,読み込んだ文字列を文字列や数値に変換します. 文字列以下のファイルのように空白で区切られた文字列(単語)をリストにします. [family] yamamoto: masashi keiko kohei shunsuke yamada: taro hanako ichiro jiro 空白で分けられていますが,configparser では一行の文字列です.これをリストにするためには,メソッド split() を使います.このメソッドは,空白や改行、タブで文字列を区切り,リストにして返します.また,引数に区切り文字(文字列も)を指定することも可能です.したがって,読み込んだ一行の文字列をある任意の区切り文字(ここでは空白)でリストにすることができます.以下に具体的なプログラム例を示します. 001 #!/usr/bin/python3 002 import configparser as config 003 004 data = config.ConfigParser() 005 data.read('list.dat') 006 007 a = data['family']['yamamoto'].split() 008 b = data['family']['yamada'].split() 009 010 print(a) 011 print(b) 実行結果は,以下のとおりです.リストは,元の文字列を空白で区切った単語になっています. $ python3 read_list.py ['masashi', 'keiko', 'kohei', 'shunsuke'] ['taro', 'hanako', 'ichiro', 'jiro'] 数値次に数値のリストを読み込みます.以下を数値 (整数と浮動小数点数,複素数) をリストにします. [number] prime: 1 2 3 5 7 11 13 17 19 23 29 31 root:1 1 1.414 1.732 2.236 2.645 complex:1+3j 4.5+5.6j 3.2425+2.71828j 先ほど同様,メソッド split() を使い,文字列を単語のリストに変換します.そして,その数値が書かれた単語を整数あるいは浮動小数点数に型変換します.リストを一度に型変換することができないので,ひとつずつ変換します.内包表記が便利です. 001 #!/usr/bin/python3 002 import configparser as config 003 004 lst = config.ConfigParser() 005 lst.read('list.dat') 006 007 p = [int(x) for x in lst['number']['prime'].split()] 008 r = [float(x) for x in lst['number']['root'].split()] 009 c = [complex(x) for x in lst['number']['complex'].split()] 010 011 print(p) 012 print(r) 013 print(c) プログラムの実行結果を以下に示します. $ python3 read_list.py [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31] [1.0, 1.0, 1.414, 1.732, 2.236, 2.645] [(1+3j), (4.5+5.6j), (3.2425+2.71828j)] 機能の詳細コンストラクターの引数インスタンスを作成するとき,コンストラクターの引数を使い値を指定すると,configparser の動作をカスタマイズすることができます.例えば, import configparser as config
instance = config.ConfigParser(inline_comment_prefixes=('#', ';'))
とすると,この instance ではインラインのコメントを使うことが可能になります.以下,コンストラクターに与える引数を示します.
ページ作成情報参考資料更新履歴
|