PYTHON MEBY

PythonでConfigファイルを読み書き (configparser)

この記事では、Pythonの`configparser`モジュールを使って、Configファイル(INIファイル)を読み書きする方法を解説します。設定ファイルの管理、アプリケーションの設定値の保存、そして異なる環境での設定値の変更などに役立つ知識を習得できます。

目次

configparserモジュールのインポート

最初に、`configparser`モジュールをインポートします。

import configparser

Configファイルの読み込み

`configparser.ConfigParser()`を使ってConfigParserオブジェクトを作成し、`read()`メソッドでConfigファイルを読み込みます。ファイルが存在しない場合は例外が発生するので、`try-except`ブロックで処理するのが一般的です。

import configparser

config = configparser.ConfigParser()
try:
    config.read('config.ini')
except FileNotFoundError:
    print('config.iniファイルが見つかりません')

ファイルパスは絶対パスでも相対パスでも指定できます。`read()`メソッドはファイルが見つからない場合、空のConfigParserオブジェクトを返します。

セクションとオプションへのアクセス

`config.sections()`でセクション名の一覧を取得し、`config.options(section)`で特定のセクションのオプション名の一覧を取得します。`config.get(section, option)`でオプションの値を取得します。データ型は文字列として取得されます。

import configparser

config = configparser.ConfigParser()
config.read('config.ini')

print(config.sections())
print(config.options('database'))
database_host = config.get('database', 'host')
print(database_host)

Configファイルへの書き込み

`config.set(section, option, value)`で値を設定し、`with open(...) as f:`でファイルを書き込みます。`write()`メソッドを使ってファイルに書き込みます。

import configparser

config = configparser.ConfigParser()
config.read('config.ini')

config.set('database', 'port', '5433')

with open('config.ini', 'w') as configfile:
    config.write(configfile)

セクションの追加と削除

`config.add_section(section)`でセクションを追加し、`config.remove_section(section)`でセクションを削除します。

import configparser

config = configparser.ConfigParser()
config.add_section('new_section')
config.remove_section('old_section')

with open('config.ini', 'w') as configfile:
    config.write(configfile)

オプションの追加と削除

`config.set(section, option, value)`でオプションを追加し、`config.remove_option(section, option)`でオプションを削除します。

import configparser

config = configparser.ConfigParser()
config.set('database', 'new_option', 'new_value')
config.remove_option('database', 'old_option')

with open('config.ini', 'w') as configfile:
    config.write(configfile)

データ型の扱い

`configparser`は基本的にすべての値を文字列として扱います。数値やブール値として扱うには、`getint()`、`getfloat()`、`getboolean()`などのメソッドを使用します。

import configparser

config = configparser.ConfigParser()
config.read('config.ini')

port = config.getint('database', 'port')
print(port, type(port))

エラー処理と例外処理

`config.get()`、`getint()`、`getfloat()`、`getboolean()`などのメソッドは、設定値が見つからない場合やデータ型の変換に失敗した場合に例外を発生させます。`try-except`ブロックを使用して例外を処理することで、プログラムの安定性を向上させることができます。

import configparser

config = configparser.ConfigParser()
config.read('config.ini')
try:
    port = config.getint('database', 'port')
except configparser.NoOptionError:
    print('ポート番号の設定がありません')
except ValueError:
    print('ポート番号の値が不正です')

適切な例外処理によって、設定ファイルの読み込みエラーやデータ型変換エラーを安全に処理することができます。

サンプルコード

以下のサンプルコードは、`config.ini`ファイルを作成し、設定値を読み書きする方法を示しています。

import configparser

# config.iniファイルを作成
config = configparser.ConfigParser()
config['DEFAULT'] = {'serveraliveinterval': '45',
                      'compression': 'yes',
                      'compression_level': '9'}
config['bitbucket.org'] = {'user': 'hguser'}
config['topsecret.server.com'] = {'host': '192.168.5.123',
                                 'port': '8022'}

with open('config.ini', 'w') as configfile:
    config.write(configfile)

# config.iniファイルを読み込む
config = configparser.ConfigParser()
config.read('config.ini')

# 設定値を表示
print(config.get('topsecret.server.com', 'host'))
print(config.getint('topsecret.server.com', 'port'))

# 設定値を変更し保存
config.set('topsecret.server.com', 'port', '8023')
with open('config.ini', 'w') as configfile:
    config.write(configfile)

関連記事