13.2. ConfigParser —構成ファイルパーサー—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/configparser
移動先:案内検索

13.2。 ConfigParser —構成ファイルパーサー

ノート

ConfigParser モジュールは、Python3でconfigparserに名前が変更されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。


このモジュールは、クラス ConfigParser を定義します。 ConfigParser クラスは、Microsoft WindowsINIファイルに見られるものと同様の構造を提供する基本的な構成ファイルパーサー言語を実装します。 これを使用して、エンドユーザーが簡単にカスタマイズできるPythonプログラムを作成できます。

ノート

このライブラリは、Windowsレジストリ拡張バージョンのINI構文で使用される値型プレフィックスを解釈または書き込みません


も参照してください

モジュール shlex
アプリケーション構成ファイルの代替形式として使用できるUnixシェルのようなミニ言語の作成のサポート。
モジュール json
jsonモジュールは、この目的にも使用できるJavaScript構文のサブセットを実装します。


構成ファイルは、[section]ヘッダーで始まり、name: valueエントリが続き、 RFC 822 のスタイルで継続するセクションで構成されます(を参照)。セクション3.1.1「ロングヘッダーフィールド」); name=valueもご利用いただけます。 先頭の空白は値から削除されることに注意してください。 オプションの値には、同じセクション内の他の値を参照するフォーマット文字列、または特別なDEFAULTセクション内の値を含めることができます。 初期化と取得時に追加のデフォルトを提供できます。 '#'または';'で始まる行は無視され、コメントを提供するために使用できます。

構成ファイルには、特定の文字(#および;)で始まるコメントが含まれる場合があります。 コメントは、それ以外の場合は空の行に単独で表示される場合と、値またはセクション名を保持する行に入力される場合があります。 後者の場合、コメントとして認識されるためには、前に空白文字を付ける必要があります。 (下位互換性のために、;のみがインラインコメントを開始し、#は開始しません。)

コア機能に加えて、 SafeConfigParser は補間をサポートします。 つまり、値には、同じセクション内の他の値を参照するフォーマット文字列、または特別なDEFAULTセクション内の値を含めることができます。 初期化時に追加のデフォルトを提供できます。

例えば:

[My Section]
foodir: %(dir)s/whatever
dir=frob
long: this value continues
   in the next line

%(dir)sdir(この場合はfrob)の値に解決します。 すべての参照拡張はオンデマンドで行われます。

デフォルト値は、 ConfigParser コンストラクターにディクショナリとして渡すことで指定できます。 追加のデフォルトがget()メソッドに渡され、他のすべてがオーバーライドされる場合があります。

セクションは通常、組み込みの辞書に保存されます。 別の辞書タイプを ConfigParser コンストラクターに渡すことができます。 たとえば、キーを並べ替えるディクショナリタイプが渡された場合、各セクション内のキーと同様に、セクションはライトバックで並べ替えられます。

class ConfigParser.RawConfigParser([defaults[, dict_type[, allow_no_value]]])

基本構成オブジェクト。 defaults が指定されると、組み込みデフォルトのディクショナリに初期化されます。 dict_type を指定すると、セクションのリスト、セクション内のオプション、およびデフォルト値のディクショナリオブジェクトを作成するために使用されます。 allow_no_value がtrue(デフォルト:False)の場合、値のないオプションが受け入れられます。 これらに表示される値はNoneです。

このクラスは、魔法の補間動作をサポートしていません。

すべてのオプション名は、 optionxform()メソッドを介して渡されます。 デフォルトの実装では、オプション名が小文字に変換されます。

バージョン2.3の新機能。

バージョン2.6で変更: dict_type が追加されました。

バージョン2.7で変更:デフォルトの dict_typecollections.OrderedDict です。 allow_no_value が追加されました。

class ConfigParser.ConfigParser([defaults[, dict_type[, allow_no_value]]])

魔法の補間機能を実装し、 get()および items()メソッドにオプションの引数を追加する RawConfigParser の派生クラス。 defaults の値は、%()s文字列補間に適切である必要があります。 __ name __ は本質的なデフォルトであることに注意してください。 その値はセクション名であり、 defaults で提供される値を上書きします。

補間で使用されるすべてのオプション名は、他のオプション名参照と同じようにoptionxform()メソッドを介して渡されます。 optionxform()のデフォルトの実装を使用すると、値foo %(bar)sfoo %(BAR)sは同等になります。

バージョン2.3の新機能。

バージョン2.6で変更: dict_type が追加されました。

バージョン2.7で変更:デフォルトの dict_typecollections.OrderedDict です。 allow_no_value が追加されました。

class ConfigParser.SafeConfigParser([defaults[, dict_type[, allow_no_value]]])

ConfigParser の派生クラスであり、魔法の補間機能のより健全なバリアントを実装します。 この実装もより予測可能です。 新しいアプリケーションは、古いバージョンのPythonと互換性がある必要がない場合は、このバージョンを優先する必要があります。

バージョン2.3の新機能。

バージョン2.6で変更: dict_type が追加されました。

バージョン2.7で変更:デフォルトの dict_typecollections.OrderedDict です。 allow_no_value が追加されました。

exception ConfigParser.Error
他のすべてのconfigparser例外の基本クラス。
exception ConfigParser.NoSectionError
指定されたセクションが見つからない場合に発生する例外。
exception ConfigParser.DuplicateSectionError
すでに存在するセクションの名前でadd_section()が呼び出された場合、例外が発生します。
exception ConfigParser.NoOptionError
指定されたオプションが指定されたセクションに見つからない場合に発生する例外。
exception ConfigParser.InterpolationError
文字列補間の実行で問題が発生したときに発生する例外の基本クラス。
exception ConfigParser.InterpolationDepthError
反復回数が MAX_INTERPOLATION_DEPTH を超えたために文字列補間を完了できない場合、例外が発生します。 InterpolationError のサブクラス。
exception ConfigParser.InterpolationMissingOptionError

値から参照されるオプションが存在しない場合に発生する例外。 InterpolationError のサブクラス。

バージョン2.3の新機能。

exception ConfigParser.InterpolationSyntaxError

置換が行われるソーステキストが必要な構文に準拠していない場合に発生する例外。 InterpolationError のサブクラス。

バージョン2.3の新機能。

exception ConfigParser.MissingSectionHeaderError
セクションヘッダーのないファイルを解析しようとすると例外が発生しました。
exception ConfigParser.ParsingError
ファイルの解析中にエラーが発生すると例外が発生します。
ConfigParser.MAX_INTERPOLATION_DEPTH
raw パラメーターがfalseの場合の、get()の再帰的補間の最大深度。 これは、 ConfigParser クラスにのみ関係します。

も参照してください

モジュール shlex
アプリケーション構成ファイルの代替形式として使用できるUnixシェルのようなミニ言語の作成のサポート。


13.2.1。 RawConfigParserオブジェクト

RawConfigParser インスタンスには次のメソッドがあります。

RawConfigParser.defaults()
インスタンス全体のデフォルトを含むディクショナリを返します。
RawConfigParser.sections()
利用可能なセクションのリストを返します。 DEFAULTはリストに含まれていません。
RawConfigParser.add_section(section)
section という名前のセクションをインスタンスに追加します。 指定された名前のセクションがすでに存在する場合、 DuplicateSectionError が発生します。 名前DEFAULT(または大文字と小文字を区別しないバリアント)が渡されると、ValueErrorが発生します。
RawConfigParser.has_section(section)
指定されたセクションが構成に存在するかどうかを示します。 DEFAULTセクションは確認応答されません。
RawConfigParser.options(section)
指定されたセクションで使用可能なオプションのリストを返します。
RawConfigParser.has_option(section, option)

指定されたセクションが存在し、指定されたオプションが含まれている場合は、 True を返します。 それ以外の場合は、 False を返します。

バージョン1.6の新機能。

RawConfigParser.read(filenames)

ファイル名のリストを読み取って解析し、正常に解析されたファイル名のリストを返します。 filenames が文字列またはUnicode文字列の場合、単一のファイル名として扱われます。 filenames で指定されたファイルを開くことができない場合、そのファイルは無視されます。 これは、潜在的な構成ファイルの場所のリスト(たとえば、現在のディレクトリ、ユーザーのホームディレクトリ、およびシステム全体のディレクトリ)を指定できるように設計されており、リスト内の既存のすべての構成ファイルが読み取られます。 指定されたファイルが存在しない場合、 ConfigParser インスタンスには空のデータセットが含まれます。 ファイルから初期値をロードする必要があるアプリケーションは、オプションのファイルに対して read()を呼び出す前に、 readfp()を使用して必要なファイルをロードする必要があります。

import ConfigParser, os

config = ConfigParser.ConfigParser()
config.readfp(open('defaults.cfg'))
config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])

バージョン2.4で変更:正常に解析されたファイル名のリストを返します。

RawConfigParser.readfp(fp[, filename])
fp のファイルまたはファイルのようなオブジェクトから構成データを読み取って解析します( readline()メソッドのみが使用されます)。 filename が省略され、 fpname属性がある場合、これは filename に使用されます。 デフォルトは<???>です。
RawConfigParser.get(section, option)
名前付きセクションオプション値を取得します。
RawConfigParser.getint(section, option)
指定されたセクションオプションを整数に強制する便利なメソッド。
RawConfigParser.getfloat(section, option)
指定されたセクションオプションを浮動小数点数に強制する便利な方法。
RawConfigParser.getboolean(section, option)
指定されたセクションオプションをブール値に強制する便利なメソッド。 オプションで受け入れられる値は"1""yes""true"、および"on"であるため、このメソッドはTrueを返すことに注意してください。 、および"0""no""false"、および"off"により、Falseが返されます。 これらの文字列値は、大文字と小文字を区別しない方法でチェックされます。 その他の値を指定すると、ValueErrorが発生します。
RawConfigParser.items(section)
指定されたセクションの各オプションの(name, value)ペアのリストを返します。
RawConfigParser.set(section, option, value)

指定されたセクションが存在する場合は、指定されたオプションを指定された値に設定します。 それ以外の場合は、 NoSectionError を発生させます。 非文字列値の内部ストレージに RawConfigParser (または raw パラメーターをtrueに設定した ConfigParser )を使用することは可能ですが、完全な機能(補間とファイルへの出力を含む)は、文字列値を使用してのみ実現できます。

バージョン1.6の新機能。

RawConfigParser.write(fileobject)

指定されたファイルオブジェクトに構成の表現を書き込みます。 この表現は、将来の read()呼び出しによって解析できます。

バージョン1.6の新機能。

RawConfigParser.remove_option(section, option)

指定されたセクションから指定されたオプションを削除します。 セクションが存在しない場合は、 NoSectionError を発生させます。 削除するオプションが存在する場合は、 True を返します。 それ以外の場合は、 False を返します。

バージョン1.6の新機能。

RawConfigParser.remove_section(section)
指定されたセクションを構成から削除します。 セクションが実際に存在した場合は、Trueを返します。 それ以外の場合は、Falseを返します。
RawConfigParser.optionxform(option)

入力ファイルで見つかった、またはクライアントコードによって渡されたオプション名 option を、内部構造で使用する必要のある形式に変換します。 デフォルトの実装は、 option の小文字バージョンを返します。 サブクラスがこれをオーバーライドする場合や、クライアントコードがインスタンスにこの名前の属性を設定して、この動作に影響を与える場合があります。

このメソッドを使用するために、必ずしもConfigParserをサブクラス化する必要はありません。インスタンスで、文字列引数をとる関数に再設定することもできます。 たとえば、strに設定すると、オプション名で大文字と小文字が区別されます。

cfgparser = ConfigParser()
...
cfgparser.optionxform = str

構成ファイルを読み取る場合、 optionxform()が呼び出される前に、オプション名の前後の空白が削除されることに注意してください。


13.2.2。 ConfigParserオブジェクト

ConfigParser クラスは、 RawConfigParser インターフェイスのいくつかのメソッドを拡張し、いくつかのオプションの引数を追加します。

ConfigParser.get(section, option[, raw[, vars]])

名前付きセクションオプション値を取得します。 vars が提供されている場合、それは辞書である必要があります。 オプションは、 vars (提供されている場合)、セクションデフォルトの順に検索されます。

raw 引数が真でない限り、すべての'%'補間は戻り値で展開されます。 補間キーの値は、オプションと同じ方法で検索されます。

ConfigParser.items(section[, raw[, vars]])

指定されたセクションの各オプションの(name, value)ペアのリストを返します。 オプションの引数は、 get()メソッドの場合と同じ意味です。

バージョン2.3の新機能。


13.2.3。 SafeConfigParserオブジェクト

SafeConfigParser クラスは、 ConfigParser と同じ拡張インターフェイスを実装しますが、次の点が追加されています。

SafeConfigParser.set(section, option, value)

指定されたセクションが存在する場合は、指定されたオプションを指定された値に設定します。 それ以外の場合は、 NoSectionError を発生させます。 value は文字列である必要があります( str または unicode ); そうでない場合は、TypeErrorが発生します。

バージョン2.4の新機能。


13.2.4。 例

構成ファイルへの書き込みの例:

import ConfigParser

config = ConfigParser.RawConfigParser()

# When adding sections or items, add them in the reverse order of
# how you want them to be displayed in the actual file.
# In addition, please note that using RawConfigParser's and the raw
# mode of ConfigParser's respective set functions, you can assign
# non-string values to keys internally, but will receive an error
# when attempting to write to a file or when you get it in non-raw
# mode. SafeConfigParser does not allow such assignments to take place.
config.add_section('Section1')
config.set('Section1', 'an_int', '15')
config.set('Section1', 'a_bool', 'true')
config.set('Section1', 'a_float', '3.1415')
config.set('Section1', 'baz', 'fun')
config.set('Section1', 'bar', 'Python')
config.set('Section1', 'foo', '%(bar)s is %(baz)s!')

# Writing our configuration file to 'example.cfg'
with open('example.cfg', 'wb') as configfile:
    config.write(configfile)

構成ファイルを再度読み取る例:

import ConfigParser

config = ConfigParser.RawConfigParser()
config.read('example.cfg')

# getfloat() raises an exception if the value is not a float
# getint() and getboolean() also do this for their respective types
a_float = config.getfloat('Section1', 'a_float')
an_int = config.getint('Section1', 'an_int')
print a_float + an_int

# Notice that the next output does not interpolate '%(bar)s' or '%(baz)s'.
# This is because we are using a RawConfigParser().
if config.getboolean('Section1', 'a_bool'):
    print config.get('Section1', 'foo')

補間を取得するには、 ConfigParser または SafeConfigParser を使用する必要があります。

import ConfigParser

config = ConfigParser.ConfigParser()
config.read('example.cfg')

# Set the third, optional argument of get to 1 if you wish to use raw mode.
print config.get('Section1', 'foo', 0)  # -> "Python is fun!"
print config.get('Section1', 'foo', 1)  # -> "%(bar)s is %(baz)s!"

# The optional fourth argument is a dict with members that will take
# precedence in interpolation.
print config.get('Section1', 'foo', 0, {'bar': 'Documentation',
                                        'baz': 'evil'})

デフォルトは、3つのタイプのConfigParsersすべてで使用できます。 使用されるオプションが他の場所で定義されていない場合、これらは補間で使用されます。

import ConfigParser

# New instance with 'bar' and 'baz' defaulting to 'Life' and 'hard' each
config = ConfigParser.SafeConfigParser({'bar': 'Life', 'baz': 'hard'})
config.read('example.cfg')

print config.get('Section1', 'foo')  # -> "Python is fun!"
config.remove_option('Section1', 'bar')
config.remove_option('Section1', 'baz')
print config.get('Section1', 'foo')  # -> "Life is hard!"

以下の関数opt_moveを使用して、セクション間でオプションを移動できます。

def opt_move(config, section1, section2, option):
    try:
        config.set(section2, option, config.get(section1, option, 1))
    except ConfigParser.NoSectionError:
        # Create non-existent section
        config.add_section(section2)
        opt_move(config, section1, section2, option)
    else:
        config.remove_option(section1, option)

一部の構成ファイルには、値のない設定が含まれていることがわかっていますが、それ以外の場合は、 ConfigParser でサポートされている構文に準拠しています。 コンストラクターへの allow_no_value パラメーターを使用して、そのような値を受け入れる必要があることを示すことができます。

>>> import ConfigParser
>>> import io

>>> sample_config = """
... [mysqld]
... user = mysql
... pid-file = /var/run/mysqld/mysqld.pid
... skip-external-locking
... old_passwords = 1
... skip-bdb
... skip-innodb
... """
>>> config = ConfigParser.RawConfigParser(allow_no_value=True)
>>> config.readfp(io.BytesIO(sample_config))

>>> # Settings with values are treated as before:
>>> config.get("mysqld", "user")
'mysql'

>>> # Settings without values provide None:
>>> config.get("mysqld", "skip-bdb")

>>> # Settings which aren't specified still raise an error:
>>> config.get("mysqld", "does-not-exist")
Traceback (most recent call last):
  ...
ConfigParser.NoOptionError: No option 'does-not-exist' in section: 'mysqld'