40
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ConfigParserモジュールの使い方

Last updated at Posted at 2013-12-13

設定ファイル(iniファイル)を扱うConfigParserモジュールについて調べてみました。

###INIファイルとは

INIファイル - Wikipedia

  • Windows の設定ファイルとして考案された
  • Windows以外でも設定ファイルのフォーマットとして利用される
  • テキスト形式
  • 容易に編集が可能(ぶっ壊すのも簡単)
  • 拡張子には「.ini」が付く。
  • セクション、キー、キー項目(プロパティ)から構成される

###Python におけるINIファイルの扱い

Python には標準でINIファイルの読み書きができるモジュール、ConfigParserが用意されています。

13.2. ConfigParser — 設定ファイルの構文解析器 — Python 2.7ja1 documentation

サンプル Python2版(check_config.py)

で、サンプルとして作ったのが次のツールです。Python 2.7で実行。

check_config.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
check_config.py
設定ファイル(ini file)をチェックするユーティリティ

注意!
エラーチェックはいい加減です。
'''

import ConfigParser
import os
import sys


def show_config(ini):
    '''
    設定ファイルの全ての内容を表示する(コメントを除く)
    '''
    for section in ini.sections():
        print '[%s]' % (section)
        show_section(ini, section)
    return


def show_section(ini, section):
    '''
    設定ファイルの特定のセクションの内容を表示する
    '''
    for key in ini.options(section):
        show_key(ini, section, key)
    return


def show_key(ini, section, key):
    '''
    設定ファイルの特定セクションの特定のキー項目(プロパティ)の内容を表示する
    '''
    print '%s.%s =%s' % (section, key, ini.get(section, key))
    return


def set_value(ini, section, key, value):
    '''
    設定ファイルの特定セクションの特定のキー項目(プロパティ)の内容を変更する
    '''
    ini.set(section, key, value)
    print 'set %s.%s =%s' % (section, key, ini.get(section, key))
    return


def usage():
    sys.stderr.write("Usage: %s inifile [section [key [value]]]\n" % sys.argv[0])
    return


if __name__ == '__main__':
    argc = len(sys.argv)
    if argc == 1:
        usage()
        sys.exit(1)

    # 設定ファイル読み込み
    INI_FILE = sys.argv[1]
    ini = ConfigParser.SafeConfigParser()
    if os.path.exists(INI_FILE):
        ini.read(INI_FILE)
    else:
        sys.stderr.write('%s が見つかりません' % INI_FILE)
        sys.exit(2)

    if argc == 2:
        show_config(ini)
    elif argc == 3:
        show_section(ini, sys.argv[2])
    elif argc == 4:
        show_key(ini, sys.argv[2], sys.argv[3])
    elif argc == 5:
        set_value(ini, sys.argv[2], sys.argv[3], sys.argv[4])
        # ファイルに書き出す(注意!現状だとコメントや改行を消してしまいます)
        f = open(INI_FILE, "w")
        ini.write(f)
        f.close()
    else:
        usage()
        sys.exit(3)

    sys.exit(0)
#EOF

###使い方
まー、ソースコードを見れば分かると思いますがw

python check_config.py

引数の指定が無い場合。
usage()(使い方)を表示。
UNIXコマンドのお約束的作法ですね。

python check_config.py inifile

引数がひとつだった場合。
第1引数には、INIファイルのファイル名を指定します。
inifileの内容を表示。

python check_config.py inifile section

引数が2つだった場合。
第2引数には、INIファイルのセクション(section)を指定します。
inifileの特定のセクション(section)の内容を表示。

python check_config.py inifile section key

引数が3つだった場合。
第3引数には、INIファイルの特定セクションのキー項目(key)を指定します。
inifileの特定のセクション(section)の特定のキー項目(key)内容を表示。

python check_config.py inifile section key value

引数が4つだった場合。
第4引数には、INIファイルの特定セクションのキー項目に対して変更する内容(value)指定します。
この操作のみINIファイルを書き換えます。
inifileの特定のセクション(section)の特定のキー項目(key)を内容valueに変更。

サンプル Python3版

いまどきPython2版ばかリではアレなんで、Python3版も用意しました。

Python 3.5で実行。

  • ConfigParser → configparser と名称変更
  • print文が変わった
  • 文字コードの扱いが変わった
check_config.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
check_config.py
設定ファイル(ini file)をチェックするユーティリティ

注意!
エラーチェックはいい加減です。
'''

import configparser
import os
import sys


def show_config(ini):
    '''
    設定ファイルの全ての内容を表示する(コメントを除く)
    '''
    for section in ini.sections():
        print ("[" + section + "]")
        show_section(ini, section)
    return


def show_section(ini, section):
    '''
    設定ファイルの特定のセクションの内容を表示する
    '''
    for key in ini.options(section):
        show_key(ini, section, key)
    return


def show_key(ini, section, key):
    '''
    設定ファイルの特定セクションの特定のキー項目(プロパティ)の内容を表示する
    '''
    print (section + "." + key + " = " + ini.get(section, key))
    return


def set_value(ini, section, key, value):
    '''
    設定ファイルの特定セクションの特定のキー項目(プロパティ)の内容を変更する
    '''
    ini.set(section, key, value)
    print (section + "." + key + " = " + ini.get(section, key))
    return


def usage():
    sys.stderr.write("Usage: " + sys.argv[0] + " inifile [section [key [value]]]\n")
    return


if __name__ == '__main__':
    argc = len(sys.argv)
    if argc == 1:
        usage()
        sys.exit(1)

    # 設定ファイル読み込み
    INI_FILE = sys.argv[1]
    ini = configparser.SafeConfigParser()
    if os.path.exists(INI_FILE):
        ini.read(INI_FILE, encoding='utf8')
    else:
        sys.stderr.write(INI_FILE + " が見つかりません")
        sys.exit(2)

    if argc == 2:
        show_config(ini)
    elif argc == 3:
        show_section(ini, sys.argv[2])
    elif argc == 4:
        show_key(ini, sys.argv[2], sys.argv[3])
    elif argc == 5:
        set_value(ini, sys.argv[2], sys.argv[3], sys.argv[4])
        # ファイルに書き出す(注意!現状だとコメントや改行を消してしまいます)
        with open(INI_FILE, "w", encoding='utf8') as f:
            ini.write(f)
    else:
        usage()
        sys.exit(3)

    sys.exit(0)
#EOF
40
54
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?