【Python】iniファイルから設定を読み込む方法

この記事では、Pythonの標準ライブラリであるconfigparserモジュールを使って、iniファイルの読み込み、データの追加・更新・削除、そしてファイルへの書き込み方法をわかりやすく解説します。

さらに、複数のiniファイルを扱う方法や環境ごとの設定ファイルの切り替えなど、実践的な応用例も紹介します。

目次から探す

Pythonでiniファイルを扱うための準備

Pythonでiniファイルを扱うためには、まず必要なモジュールをインポートし、iniファイル自体を作成する必要があります。

このセクションでは、configparserモジュールのインポート方法と、iniファイルの基本的な作成方法について解説します。

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

Pythonには、iniファイルを簡単に扱うための標準ライブラリとしてconfigparserモジュールが用意されています。

このモジュールを使うことで、iniファイルの読み書きが非常に簡単になります。

まずは、configparserモジュールをインポートする方法を見てみましょう。

import configparser

上記のように、import configparserと記述するだけで、configparserモジュールをインポートすることができます。

これで、iniファイルの読み書きに必要な準備が整いました。

iniファイルの作成方法

次に、iniファイルの基本的な構造と作成方法について説明します。

iniファイルは、セクション、オプション、値の3つの要素で構成されています。

以下に、簡単なiniファイルの例を示します。

[セクション1]
オプション1 = 値1
オプション2 = 値2
[セクション2]
オプションA = 値A
オプションB = 値B

このように、iniファイルは複数のセクションに分かれており、それぞれのセクションには複数のオプションとその値が含まれています。

セクション名は角括弧[]で囲み、オプションと値は=で区切ります。

具体的な例として、以下のような設定ファイルを作成してみましょう。

[database]
host = localhost
port = 5432
user = admin
password = secret
[server]
host = 0.0.0.0
port = 8080

このiniファイルには、databaseserverという2つのセクションがあり、それぞれのセクションには複数のオプションと値が設定されています。

このファイルをconfig.iniという名前で保存します。

以上で、Pythonでiniファイルを扱うための基本的な準備が整いました。

次のセクションでは、実際にiniファイルを読み込む方法について詳しく解説します。

iniファイルの読み込み

iniファイルを読み込むためには、Pythonの標準ライブラリであるconfigparserモジュールを使用します。

このモジュールを使うことで、iniファイルの内容を簡単に読み取ることができます。

基本的な読み込み方法

ConfigParserクラスのインスタンス作成

まず、configparserモジュールのConfigParserクラスのインスタンスを作成します。

このインスタンスを使ってiniファイルの読み込みや操作を行います。

import configparser
# ConfigParserクラスのインスタンスを作成
config = configparser.ConfigParser()

readメソッドでiniファイルを読み込む

次に、readメソッドを使ってiniファイルを読み込みます。

readメソッドには、読み込みたいiniファイルのパスを指定します。

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

これで、settings.iniファイルの内容がconfigインスタンスに読み込まれました。

セクションとオプションの取得

iniファイルはセクションとオプションで構成されています。

セクションは大きなカテゴリを示し、オプションはそのセクション内の具体的な設定項目です。

セクションの一覧を取得する

読み込んだiniファイルのセクション一覧を取得するには、sectionsメソッドを使用します。

このメソッドは、iniファイル内の全てのセクション名をリストとして返します。

# セクションの一覧を取得
sections = config.sections()
print(sections)

例えば、settings.iniファイルが以下のような内容だった場合、

[General]
app_name = MyApp
version = 1.0
[User]
name = John Doe
email = [email protected]

上記のコードを実行すると、以下のような出力が得られます。

['General', 'User']

オプションの値を取得する

特定のセクション内のオプションの値を取得するには、getメソッドを使用します。

getメソッドには、セクション名とオプション名を指定します。

# 'General'セクションの'app_name'オプションの値を取得
app_name = config.get('General', 'app_name')
print(app_name)
# 'User'セクションの'name'オプションの値を取得
user_name = config.get('User', 'name')
print(user_name)

上記のコードを実行すると、以下のような出力が得られます。

MyApp
John Doe

このようにして、iniファイルから特定の設定値を簡単に取得することができます。

iniファイルのデータ操作

iniファイルの読み込みだけでなく、データの追加、更新、削除も行うことができます。

ここでは、Pythonのconfigparserモジュールを使って、iniファイルのデータ操作方法について詳しく解説します。

データの追加

セクションの追加

新しいセクションを追加するには、add_sectionメソッドを使用します。

以下の例では、新しいセクション NewSection を追加しています。

import configparser
# ConfigParserオブジェクトの作成
config = configparser.ConfigParser()
# iniファイルの読み込み
config.read('example.ini')
# 新しいセクションの追加
config.add_section('NewSection')
# iniファイルへの書き込み
with open('example.ini', 'w') as configfile:
    config.write(configfile)

オプションの追加

新しいオプションを追加するには、setメソッドを使用します。

以下の例では、 NewSection に新しいオプション new_option を追加しています。

import configparser
# ConfigParserオブジェクトの作成
config = configparser.ConfigParser()
# iniファイルの読み込み
config.read('example.ini')
# 新しいオプションの追加
config.set('NewSection', 'new_option', 'new_value')
# iniファイルへの書き込み
with open('example.ini', 'w') as configfile:
    config.write(configfile)

データの更新

オプションの値を更新する

既存のオプションの値を更新するには、同じくsetメソッドを使用します。

以下の例では、 ExistingSectionexisting_option の値を更新しています。

import configparser
# ConfigParserオブジェクトの作成
config = configparser.ConfigParser()
# iniファイルの読み込み
config.read('example.ini')
# オプションの値を更新
config.set('ExistingSection', 'existing_option', 'updated_value')
# iniファイルへの書き込み
with open('example.ini', 'w') as configfile:
    config.write(configfile)

データの削除

セクションの削除

セクションを削除するには、remove_sectionメソッドを使用します。

以下の例では、 UnwantedSection を削除しています。

import configparser
# ConfigParserオブジェクトの作成
config = configparser.ConfigParser()
# iniファイルの読み込み
config.read('example.ini')
# セクションの削除
config.remove_section('UnwantedSection')
# iniファイルへの書き込み
with open('example.ini', 'w') as configfile:
    config.write(configfile)

オプションの削除

オプションを削除するには、remove_optionメソッドを使用します。

以下の例では、 ExistingSectionunwanted_option を削除しています。

import configparser
# ConfigParserオブジェクトの作成
config = configparser.ConfigParser()
# iniファイルの読み込み
config.read('example.ini')
# オプションの削除
config.remove_option('ExistingSection', 'unwanted_option')
# iniファイルへの書き込み
with open('example.ini', 'w') as configfile:
    config.write(configfile)

これで、iniファイルのデータ操作についての基本的な方法を理解できたと思います。

次は、iniファイルの書き込み方法について解説します。

iniファイルの書き込み

iniファイルの読み込みやデータ操作ができるようになったら、次はその変更をファイルに書き込む方法を学びましょう。

Pythonのconfigparserモジュールを使えば、簡単にiniファイルにデータを書き込むことができます。

iniファイルへの保存方法

iniファイルへの保存には、ConfigParserクラスwriteメソッドを使用します。

このメソッドを使うことで、メモリ上の設定データをiniファイルに書き出すことができます。

writeメソッドの使用

まずは、writeメソッドを使った基本的な書き込み方法を見てみましょう。

import configparser
# ConfigParserのインスタンスを作成
config = configparser.ConfigParser()
# セクションとオプションを追加
config['DEFAULT'] = {'ServerAliveInterval': '45',
                     'Compression': 'yes',
                     'CompressionLevel': '9'}
config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Host Port'] = '50022'  # 追加
topsecret['ForwardX11'] = 'no'  # 追加
# iniファイルに書き込む
with open('example.ini', 'w') as configfile:
    config.write(configfile)

このコードでは、まずConfigParserのインスタンスを作成し、いくつかのセクションとオプションを追加しています。

その後、writeメソッドを使ってこれらの設定をexample.iniというファイルに書き込んでいます。

withステートメントを使ったファイル操作

Pythonでは、ファイル操作を行う際にwithステートメントを使うことが推奨されています。

withステートメントを使うことで、ファイルのクローズ処理を自動的に行ってくれるため、コードがシンプルで安全になります。

上記の例でもwithステートメントを使っていますが、もう少し詳しく見てみましょう。

import configparser
# ConfigParserのインスタンスを作成
config = configparser.ConfigParser()
# セクションとオプションを追加
config['DEFAULT'] = {'ServerAliveInterval': '45',
                     'Compression': 'yes',
                     'CompressionLevel': '9'}
config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Host Port'] = '50022'  # 追加
topsecret['ForwardX11'] = 'no'  # 追加
# withステートメントを使ってiniファイルに書き込む
with open('example.ini', 'w') as configfile:
    config.write(configfile)

with open('example.ini', 'w') as configfile:の部分でファイルを開き、そのファイルオブジェクトをconfigfileという変数に代入しています。

withステートメントのブロックが終了すると、ファイルは自動的にクローズされます。

これで、iniファイルへの書き込み方法について理解できたと思います。

次は、iniファイルを使った応用例について見ていきましょう。

応用例

ここでは、iniファイルを使った設定管理の応用例について解説します。

複数のiniファイルを扱う方法、デフォルト値の設定、環境ごとの設定ファイルの切り替えについて説明します。

複数のiniファイルを扱う

複数のiniファイルを扱う場合、configparserモジュールのreadメソッドを使って複数のファイルを一度に読み込むことができます。

以下の例では、config1.iniconfig2.iniの2つのファイルを読み込んでいます。

import configparser
# ConfigParserのインスタンスを作成
config = configparser.ConfigParser()
# 複数のiniファイルを読み込む
config.read(['config1.ini', 'config2.ini'])
# セクションとオプションの値を取得
for section in config.sections():
    print(f'Section: {section}')
    for option in config.options(section):
        print(f'{option} = {config.get(section, option)}')

この方法を使うと、複数の設定ファイルを一度に読み込んで、設定を統合することができます。

デフォルト値の設定

configparserモジュールでは、デフォルト値を設定することができます。

デフォルト値は、特定のセクションやオプションが存在しない場合に使用されます。

以下の例では、デフォルト値を設定しています。

import configparser
# デフォルト値を設定
defaults = {
    'server': 'localhost',
    'port': '8080'
}
# ConfigParserのインスタンスを作成し、デフォルト値を設定
config = configparser.ConfigParser(defaults)
# iniファイルを読み込む
config.read('config.ini')
# デフォルト値を含むオプションの値を取得
server = config.get('network', 'server')
port = config.get('network', 'port')
print(f'Server: {server}')
print(f'Port: {port}')

この例では、config.iniファイルにnetworkセクションが存在しない場合でも、デフォルト値としてlocalhost8080が使用されます。

環境ごとの設定ファイルの切り替え

開発環境、テスト環境、本番環境など、異なる環境ごとに設定ファイルを切り替えることがよくあります。

これを実現するために、環境変数やコマンドライン引数を使って設定ファイルを動的に選択する方法があります。

以下の例では、環境変数を使って設定ファイルを切り替えています。

import configparser
import os
# 環境変数から設定ファイルのパスを取得
config_file = os.getenv('CONFIG_FILE', 'default_config.ini')
# ConfigParserのインスタンスを作成
config = configparser.ConfigParser()
# 指定された設定ファイルを読み込む
config.read(config_file)
# セクションとオプションの値を取得
database = config.get('database', 'name')
user = config.get('database', 'user')
print(f'Database: {database}')
print(f'User: {user}')

この例では、環境変数CONFIG_FILEが設定されていない場合、デフォルトのdefault_config.iniファイルが使用されます。

環境変数を設定することで、異なる環境ごとに適切な設定ファイルを読み込むことができます。

# 環境変数を設定してスクリプトを実行
export CONFIG_FILE=production_config.ini
python script.py

このようにして、環境ごとの設定ファイルを簡単に切り替えることができます。

目次から探す