Ad

導入 anchor.png Edit

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

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

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

Page Top

設定ファイルの準備 anchor.png Edit

以下のような設定ファイル「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 Edit

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

この実行結果は、

123
<type 'str'>

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

Page Top

数値の読み込み anchor.png Edit

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 Edit

文字列の場合はすでに紹介したように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'>
Page Top

真偽型の読み込み anchor.png Edit

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

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

結果

True
<type 'bool'>
Page Top

デフォルト値の指定 anchor.png Edit

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

例えば、

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

のように初期化すると、

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

結果

no setting

となります。

Page Top

まとめ anchor.png Edit

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

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


Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 735, today: 1, yesterday: 1
Princeps date: 2016-12-24 (Sat) 09:14:21
Last-modified: 2016-12-24 (Sat) 11:29:06 (JST) (934d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF