ページへ戻る

− Links

 印刷 

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

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

ページ内コンテンツ
  • 導入
  • 設定ファイルの準備
  • 値の読み込み
    • 数値の読み込み
    • 文字列の読み込み
    • 真偽型の読み込み
    • デフォルト値の指定
  • まとめ

導入 anchor.png[1] Edit [2]

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

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

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

Page Top

設定ファイルの準備 anchor.png[4] Edit [5]

以下のような設定ファイル「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の意)などが認識されます。

Page Top

値の読み込み anchor.png[6] Edit [7]

このファイルの「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[3]には「RawConfigParser編集[8]」、「ConfigParser[3]」、「SafeConfigParser編集[9]」の3つのオブジェクトがあり、この順で機能が拡張されています。なので通常は一番多機能な「SafeConfigParser編集[9]」を使っておけばあとで機能追加もしやすく無難です。

この実行結果は、

123
<type 'str'>

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

Page Top

数値の読み込み anchor.png[10] Edit [11]

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として読んでから変換する方が便利です。

Page Top

文字列の読み込み anchor.png[12] Edit [13]

文字列の場合はすでに紹介したように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[14] ver2系のstrからunicode型への変換は「Python​/Unicodeの取り扱い[15]」でご紹介したように、decodeで行えます。

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

結果

文字列2
<type 'unicode'>
Page Top

真偽型の読み込み anchor.png[16] Edit [17]

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

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

結果

True
<type 'bool'>
Page Top

デフォルト値の指定 anchor.png[18] Edit [19]

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

例えば、

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

のように初期化すると、

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

結果

no setting

となります。

Page Top

まとめ anchor.png[20] Edit [21]

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

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


Last-modified: 2016-12-24 (土) 11:29:06 (JST) (2678d) by njf