設定ファイルの読み込み (configparserモジュール)について
多くのアプリケーションでは、動作設定を外部の設定ファイルで管理することが一般的です。これにより、プログラムのソースコードを直接変更せずに、動作を簡単にカスタマイズできます。Python
では、設定ファイルの読み書きに便利なconfigparser
モジュールが標準ライブラリとして提供されています。
この記事では、configparser
モジュールを使って、INI形式の設定ファイルを読み書きする方法について詳しく解説します。設定ファイルの読み込み、設定値の取得、書き込みといった基本操作を中心に説明します
configparser
モジュールとは?
configparser
モジュールは、INI形式の設定ファイルを読み込み、解析、書き込みを行うためのツールです。INIファイルは、以下のようなシンプルなテキスト形式で、設定をセクションごとに分け、キーと値のペアで管理します。
INI形式の例
[General]
app_name = MyApp
version = 1.0
[Database]
host = localhost
port = 5432
username = admin
password = secret
このように、セクション(例: [General]
, [Database]
)の中に、キーと値(key = value
)のペアを記述します。configparser
は、この形式のファイルを簡単に操作できるツールです
設定ファイルの読み込み
まずは、configparser
を使ってINI形式の設定ファイルを読み込む方法を見ていきます。
設定ファイルの準備
以下のような設定ファイルをconfig.ini
として保存します。
[General]
app_name = MyApp
version = 1.0
[Database]
host = localhost
port = 5432
username = admin
password = secret
設定ファイルを読み込む
次に、configparser
を使ってこの設定ファイルを読み込み、各設定項目を取得するコードを作成します。
import configparser
# ConfigParserオブジェクトの作成
config = configparser.ConfigParser()
# 設定ファイルの読み込み
config.read('config.ini')
# セクションごとの設定値を取得
app_name = config['General']['app_name']
version = config['General']['version']
db_host = config['Database']['host']
db_port = config['Database']['port']
db_user = config['Database']['username']
db_password = config['Database']['password']
print(f"App Name: {app_name}")
print(f"Version: {version}")
print(f"Database Host: {db_host}")
print(f"Port: {db_port}")
print(f"Username: {db_user}")
print(f"Password: {db_password}")
実行結果
App Name: MyApp
Version: 1.0
Database Host: localhost
Port: 5432
Username: admin
Password: secret
読み込みに関するポイント
ConfigParser
:configparser.ConfigParser()
を使って、設定ファイルを管理するオブジェクトを作成します。read()
:config.read('ファイル名')
でINIファイルを読み込みます。- セクションとキーでアクセス: 設定値は、セクション名とキー名を指定して取得します(
config['セクション']['キー']
)。
設定値の操作と型変換
設定ファイルの値はすべて文字列として読み込まれますが、数値やブール値に変換することも簡単にできます。
型変換を行う
次のように、数値やブール値に変換して扱うことができます。
# 数値として取得
db_port = config.getint('Database', 'port')
# ブール値として取得
debug_mode = config.getboolean('General', 'debug')
getint()
: 整数値を取得します。getboolean()
: 真偽値を取得します。
設定値が存在しない場合のデフォルト値
設定値が存在しない場合のデフォルト値を指定することも可能です。
# 存在しない設定値にデフォルト値を設定
timeout = config.getint('Database', 'timeout', fallback=30)
print(f"Timeout: {timeout}")
ここでは、timeout
が設定ファイルに存在しない場合、デフォルトで30
を使用するよう指定しています
設定ファイルの書き込み
configparser
モジュールは、設定ファイルの読み込みだけでなく、設定ファイルへの書き込みもサポートしています。
設定ファイルに新しいセクションやキーを追加する
次に、config.ini
に新しい設定項目を追加してみましょう。
import configparser
# ConfigParserオブジェクトの作成
config = configparser.ConfigParser()
# 設定ファイルの読み込み
config.read('config.ini')
# 新しいセクションと設定項目の追加
config.add_section('Logging')
config.set('Logging', 'log_file', 'app.log')
config.set('Logging', 'log_level', 'DEBUG')
# 設定ファイルに書き込み
with open('config.ini', 'w') as configfile:
config.write(configfile)
print("設定ファイルに新しいセクションを追加しました")
書き込み後の設定ファイル
[General]
app_name = MyApp
version = 1.0
[Database]
host = localhost
port = 5432
username = admin
password = secret
[Logging]
log_file = app.log
log_level = DEBUG
設定ファイルの書き込みに関するポイント
add_section()
: 新しいセクションを追加します。set()
: 既存のセクションに新しいキーと値を設定します。write()
:config.write(configfile)
で、設定内容をファイルに書き込みます。
設定の削除
設定ファイルから不要なセクションやキーを削除することも可能です。
セクションやキーの削除
# セクションの削除
config.remove_section('Logging')
# キーの削除
config.remove_option('Database', 'password')
# 設定ファイルに書き込み
with open('config.ini', 'w') as configfile:
config.write(configfile)
この例では、Logging
セクションを削除し、Database
セクション内のpassword
キーを削除しています
設定ファイルを使ったプロジェクトの管理
configparser
を活
用することで、プログラムの設定を外部のINIファイルにまとめて管理できます。これにより、設定をコードから分離し、プログラムを変更せずに動作や環境に応じて設定を柔軟にカスタマイズできるようになります。
例: Webアプリケーションの設定
例えば、次のようなWebアプリケーションの設定を外部のINIファイルで管理することができます。
[WebApp]
host = 0.0.0.0
port = 8080
debug = True
アプリケーションのソースコードでは、configparser
を使ってこれらの設定を読み込みます。
import configparser
config = configparser.ConfigParser()
config.read('webapp_config.ini')
host = config['WebApp']['host']
port = config.getint('WebApp', 'port')
debug = config.getboolean('WebApp', 'debug')
# 取得した設定を使ってWebアプリケーションを起動
run_web_app(host, port, debug=debug)
これにより、動作環境ごとに設定ファイルを変更するだけで、プログラムの挙動を簡単にカスタマイズできます
まとめ
Python
のconfigparser
モジュールを使うと、INI形式の設定ファイルを読み書きでき、プログラムの設定を外部ファイルに切り離して管理できます。これにより、コードの変更を最小限に抑えつつ、設定の変更やカスタマイズが簡単になります。
- 設定ファイルを読み込み、必要な設定値を取得する
- 型変換やデフォルト値を使って設定値を柔軟に扱う
- 設定ファイルに新しいセクションやキーを追加、編集、削除する これらの機能を使って、よりメンテナンスしやすい柔軟なプログラムを構築しましょう。