ページへ戻る

− Links

 印刷 

Python​/設定ファイルの読み込み のソース :: NJF Wiki

xpwiki:Python/設定ファイルの読み込みのソース

« Prev[3]  
*導入 [#b8056944]
Pythonでプログラムしていると、数個程度のパラメーターなら引数で与えた方が楽なのですが、数が増えたり長いパラメーターがあるといろいろな設定を外部ファイルにしたいことが良くあります。

自前でフォーマットを作っても良いのですが、ちょっとした書式の違いで動かなくなったりと、意外に面倒なので、すでにあるものを使うのが無難です。

ここではPythonにデフォルトで入っている設定ファイル読み込みのモジュール、ConfigParserを使った設定ファイルの読み込みをご紹介します。

*設定ファイルの準備 [#ie4f9869]
以下のような設定ファイル「test.setting」を読み込むとします。

 #設定ファイル
 
 [numbers]
 setting_number_1 = 123
 setting_number_2 = 99.999
 
 [strings]
 setting_str_1 = string1
 setting_str_2 = 文字列2
 
 [other]
 setting_bool = true

「#」で始まる行はコメントとして無視されます。
「[]」で囲まれた部分はセクション名で、ないとエラーとなります。セクションが要らないときでも入れておきましょう。
空白などは自由に入れることができます。

文字列に引用符は必要なく、空白があっても右辺全てが出力されます。

真偽型は「True」「true」「False」「false」、「1」(Trueの意)、「0」(Falseの意)などが認識されます。

*値の読み込み [#yfa71428]
このファイルの「numbers」セクションの「setting_number_1」を読み込むには以下のようにします。

 import ConfigParser
 
 settingFile = ConfigParser.SafeConfigParser()
 
 settingFile.read("test.setting")
 
 settingNumber1 = settingFile.get("numbers","setting_number_1")
 
 print settingNumber1
 print type(settingNumber1)

ConfigParserには「RawConfigParser」、「ConfigParser」、「SafeConfigParser」の3つのオブジェクトがあり、この順で機能が拡張されています。なので通常は一番多機能な「SafeConfigParser」を使っておけばあとで機能追加もしやすく無難です。

この実行結果は、
 123
 <type 'str'>

となります。getを使うとstr型で返されます。

**数値の読み込み [#u51bd31d]

intやfloatで結果を取りたいときには以下のように専用のメソッドを使います。

 settingNumber1 = settingFile.getint("numbers","setting_number_1")
 
 print settingNumber1
 print type(settingNumber1)
 
 settingNumber2 = settingFile.getfloat("numbers","setting_number_2")
 
 print settingNumber2
 print type(settingNumber2)

結果
 123
 <type 'int'>
 99.999
 <type 'float'>

型が決まっている場合にはこちらの方が便利です。
だだし、書式がintやfloatと解釈できない物だとエラーになります。

読み込んでからその内容によって型を決めるような場合にはgetでひとまずstrとして読んでから変換する方が便利です。

**文字列の読み込み [#xf2ab3aa]

文字列の場合はすでに紹介したようにgetで読み込みます。

 settingStr1 = settingFile.get("strings","setting_str_1")
 print settingStr1
 print type(settingStr1)
 
 settingStr2 = settingFile.get("strings","setting_str_2")
 print settingStr2
 print type(settingStr2)

結果
 string1
 <type 'str'>
 文字列2
 <type 'str'>

となります。
このとき日本語などを利用するなら、設定ファイルをUTF8にしておきましょう。
[[Python]] ver2系のstrからunicode型への変換は「[[Python/Unicodeの取り扱い]]」でご紹介したように、decodeで行えます。

 settingStr2 = settingFile.get("strings","setting_str_2")
 settingStr2Utf = settingStr2.decode("utf_8")
 print settingStr2Utf
 print type(settingStr2Utf)

結果
 文字列2
 <type 'unicode'>

**真偽型の読み込み [#j29371a3]

真偽値の読み込みはgetbooleanを使います。

 settingBool = settingFile.getboolean("other","setting_bool")
 print settingBool
 print type(settingBool)

結果
 True
 <type 'bool'>

**デフォルト値の指定 [#q12187cb]

値が設定ファイルに存在しないときのために、デフォルト値を指定することもできます。

例えば、

 settingFile = ConfigParser.SafeConfigParser({"setting_str_3":"no setting"})

のように初期化すると、

 settingStr3 = settingFile.get("strings","setting_str_3")
 print settingStr3

結果
 no setting

となります。

*まとめ [#w4727992]

ConfigParserを使うと、str、int、float、bool型を簡単に読み込めるようになります。デフォルト値の指定も簡単です。

ちょっとした設定ファイルが必要な時には重宝します。またここでは紹介していませんが、ファイルの書き込みも可能です。

« Prev[3]