【Python】iniファイルからリストを取得する方法

Pythonで設定ファイルを扱う際に便利なiniファイル。

この記事では、Pythonの標準ライブラリであるconfigparserモジュールを使って、iniファイルを読み書きする方法を解説します。

特に、iniファイルからリストを取得する方法に焦点を当て、カンマ区切りや改行区切りのリストをどのように扱うかを具体的な例とともに紹介します。

目次から探す

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

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

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

ここでは、configparserモジュールのインストール方法と基本的な使い方について解説します。

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

configparserモジュールはPythonの標準ライブラリに含まれているため、追加のインストールは不要です。

Pythonをインストールしていれば、すぐに使用することができます。

configparserモジュールの基本的な使い方

まずは、configparserモジュールをインポートする方法と、基本的な使い方について見ていきましょう。

  1. モジュールのインポート

configparserモジュールを使用するためには、まずインポートする必要があります。

以下のようにインポートします。

import configparser
  1. iniファイルの読み込み

次に、iniファイルを読み込む方法を見ていきます。

以下のようなサンプルのiniファイルを用意します。

[settings]
   username = user1
   password = pass123

このiniファイルを読み込むためには、以下のようにします。

import configparser
   # ConfigParserオブジェクトの作成
   config = configparser.ConfigParser()
   # iniファイルの読み込み
   config.read('config.ini')
   # セクションとキーを指定して値を取得
   username = config['settings']['username']
   password = config['settings']['password']
   print(f'Username: {username}')
   print(f'Password: {password}')

上記のコードでは、config.iniというファイルを読み込み、settingsセクションのusernamepasswordの値を取得しています。

  1. iniファイルの書き込み

iniファイルに新しいデータを書き込む方法も見ておきましょう。

以下のコードでは、新しいiniファイルを作成し、データを書き込んでいます。

import configparser
   # ConfigParserオブジェクトの作成
   config = configparser.ConfigParser()
   # セクションの追加
   config['settings'] = {
       'username': 'user1',
       'password': 'pass123'
   }
   # iniファイルへの書き込み
   with open('new_config.ini', 'w') as configfile:
       config.write(configfile)

このコードを実行すると、new_config.iniというファイルが作成され、指定したデータが書き込まれます。

以上が、configparserモジュールの基本的な使い方です。

次のセクションでは、iniファイルからリストを取得する方法について詳しく解説します。

iniファイルの読み込み

iniファイルのサンプル

まず、iniファイルの基本的な構造を理解しましょう。

iniファイルは、セクション、キー、値の組み合わせで構成されています。

以下は、サンプルのiniファイルの内容です。

[General]
name = John Doe
age = 30
[Settings]
theme = dark
language = en
[Items]
items = apple, banana, cherry

このサンプルiniファイルには、3つのセクション(GeneralSettingsItems)があり、それぞれにキーと値が定義されています。

特にItemsセクションには、カンマ区切りのリストが含まれています。

configparserを使ったiniファイルの読み込み

Pythonのconfigparserモジュールを使って、iniファイルを読み込む方法を見ていきましょう。

以下のコードは、上記のサンプルiniファイルを読み込む例です。

import configparser
# ConfigParserオブジェクトを作成
config = configparser.ConfigParser()
# iniファイルを読み込む
config.read('sample.ini')
# セクションとキーを指定して値を取得
name = config.get('General', 'name')
age = config.getint('General', 'age')
theme = config.get('Settings', 'theme')
language = config.get('Settings', 'language')
items = config.get('Items', 'items')
# 取得した値を表示
print(f"Name: {name}")
print(f"Age: {age}")
print(f"Theme: {theme}")
print(f"Language: {language}")
print(f"Items: {items}")

このコードでは、configparser.ConfigParserオブジェクトを作成し、readメソッドを使ってsample.iniファイルを読み込んでいます。

その後、getメソッドgetintメソッドを使って、特定のセクションとキーから値を取得しています。

実行結果は以下のようになります。

Name: John Doe
Age: 30
Theme: dark
Language: en
Items: apple, banana, cherry

このようにして、iniファイルから必要な情報を簡単に取得することができます。

次のセクションでは、iniファイルからリストを取得する方法について詳しく見ていきます。

iniファイルからリストを取得する方法

iniファイルにリストを定義する方法

iniファイルにリストを定義する方法はいくつかありますが、ここでは代表的な2つの方法を紹介します。

カンマ区切りのリスト

カンマ区切りのリストは、各要素をカンマで区切って1行にまとめる方法です。

以下はその例です。

[Settings]
items = apple, banana, cherry, date

この方法はシンプルで見やすいですが、要素にカンマが含まれる場合には適していません。

改行区切りのリスト

改行区切りのリストは、各要素を改行で区切って複数行にわたって定義する方法です。

以下はその例です。

[Settings]
items = 
    apple
    banana
    cherry
    date

この方法は要素にカンマが含まれていても問題なく扱えますが、読み込み時に少し工夫が必要です。

configparserでリストを取得する方法

iniファイルからリストを取得するためには、configparserモジュールを使います。

ここでは、カンマ区切りのリストと改行区切りのリストをそれぞれ取得する方法を紹介します。

getメソッドを使ったリストの取得

まずは、カンマ区切りのリストを取得する方法です。

getメソッドを使って値を取得し、splitメソッドでカンマ区切りの文字列をリストに変換します。

import configparser
# configparserオブジェクトを作成
config = configparser.ConfigParser()
# iniファイルを読み込む
config.read('example.ini')
# カンマ区切りのリストを取得
items = config.get('Settings', 'items').split(',')
# 取得したリストを表示
print(items)

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

['apple', 'banana', 'cherry', 'date']

getlistメソッドの実装(カスタム関数)

次に、改行区切りのリストを取得するためのカスタム関数を実装します。

getlistメソッドを自作して、改行区切りのリストを取得します。

import configparser
# configparserオブジェクトを作成
config = configparser.ConfigParser()
# iniファイルを読み込む
config.read('example.ini')
# 改行区切りのリストを取得するカスタム関数
def getlist(section, option):
    return [item.strip() for item in config.get(section, option).split('\n') if item.strip()]
# 改行区切りのリストを取得
items = getlist('Settings', 'items')
# 取得したリストを表示
print(items)

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

['apple', 'banana', 'cherry', 'date']

このように、configparserモジュールを使ってiniファイルからリストを取得する方法を理解しておくと、設定ファイルを効率的に扱うことができます。

実践例

ここでは、実際にiniファイルからリストを取得する具体的な例を見ていきます。

まずはカンマ区切りのリストを取得する方法から始め、その後に改行区切りのリストを取得する方法を解説します。

カンマ区切りリストの取得例

まず、カンマ区切りのリストを定義したiniファイルの例を見てみましょう。

# settings.ini
[Settings]
items = apple, banana, cherry, date

このiniファイルからリストを取得するためのPythonコードは以下の通りです。

import configparser
# configparserオブジェクトを作成
config = configparser.ConfigParser()
# iniファイルを読み込む
config.read('settings.ini')
# 'Settings'セクションの'items'キーの値を取得
items_str = config.get('Settings', 'items')
# カンマで分割してリストに変換
items_list = items_str.split(',')
# 各要素の前後の空白を削除
items_list = [item.strip() for item in items_list]
print(items_list)

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

['apple', 'banana', 'cherry', 'date']

このように、カンマ区切りのリストを簡単に取得することができます。

改行区切りリストの取得例

次に、改行区切りのリストを定義したiniファイルの例を見てみましょう。

# settings.ini
[Settings]
items = 
    apple
    banana
    cherry
    date

このiniファイルからリストを取得するためのPythonコードは以下の通りです。

import configparser
# configparserオブジェクトを作成
config = configparser.ConfigParser()
# iniファイルを読み込む
config.read('settings.ini')
# 'Settings'セクションの'items'キーの値を取得
items_str = config.get('Settings', 'items')
# 改行で分割してリストに変換
items_list = items_str.split('\n')
# 各要素の前後の空白を削除
items_list = [item.strip() for item in items_list if item.strip()]
print(items_list)

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

['apple', 'banana', 'cherry', 'date']

改行区切りのリストも同様に簡単に取得することができます。

以上のように、iniファイルからリストを取得する方法は非常にシンプルです。

カンマ区切りや改行区切りのリストを適切に処理することで、設定ファイルからのデータ取得が容易になります。

エラーハンドリング

Pythonでiniファイルを扱う際には、エラーハンドリングが重要です。

iniファイルが存在しない場合や、指定したセクションやキーが存在しない場合に適切に対処することで、プログラムの安定性を保つことができます。

ここでは、これらのエラーに対する対処方法について解説します。

iniファイルが存在しない場合の対処

まず、iniファイルが存在しない場合の対処方法について説明します。

Pythonのconfigparserモジュールを使用してiniファイルを読み込む際、ファイルが存在しないとFileNotFoundErrorが発生します。

このエラーをキャッチして適切に対処する方法を見てみましょう。

import configparser
config = configparser.ConfigParser()
try:
    # iniファイルを読み込む
    config.read('config.ini')
    if not config.sections():
        raise FileNotFoundError('iniファイルが見つかりません')
except FileNotFoundError as e:
    print(f"エラー: {e}")
    # 必要に応じてデフォルト設定を使用するなどの対処を行う
    config['DEFAULT'] = {'example_key': 'default_value'}

この例では、config.read('config.ini')でiniファイルを読み込んでいますが、ファイルが存在しない場合はFileNotFoundErrorが発生します。

このエラーをキャッチして、エラーメッセージを表示し、必要に応じてデフォルト設定を使用するなどの対処を行います。

セクションやキーが存在しない場合の対処

次に、指定したセクションやキーが存在しない場合の対処方法について説明します。

configparserモジュールでは、セクションやキーが存在しない場合にNoSectionErrorNoOptionErrorが発生します。

これらのエラーをキャッチして適切に対処する方法を見てみましょう。

import configparser
config = configparser.ConfigParser()
try:
    # iniファイルを読み込む
    config.read('config.ini')
    
    # セクションが存在しない場合の対処
    if not config.has_section('Settings'):
        raise configparser.NoSectionError('Settings')
    
    # キーが存在しない場合の対処
    if not config.has_option('Settings', 'example_key'):
        raise configparser.NoOptionError('example_key', 'Settings')
    
    # セクションとキーが存在する場合の処理
    example_value = config.get('Settings', 'example_key')
    print(f"example_keyの値: {example_value}")
except configparser.NoSectionError as e:
    print(f"エラー: セクションが見つかりません - {e.section}")
    # 必要に応じてデフォルト設定を使用するなどの対処を行う
    config['Settings'] = {'example_key': 'default_value'}
except configparser.NoOptionError as e:
    print(f"エラー: キーが見つかりません - {e.option} in {e.section}")
    # 必要に応じてデフォルト値を使用するなどの対処を行う
    config.set('Settings', 'example_key', 'default_value')

この例では、config.read('config.ini')でiniファイルを読み込んだ後、config.has_section('Settings')config.has_option('Settings', 'example_key')を使用してセクションとキーの存在を確認しています。

存在しない場合は、それぞれNoSectionErrorNoOptionErrorを発生させ、エラーメッセージを表示し、必要に応じてデフォルト設定を使用するなどの対処を行います。

これらのエラーハンドリングを実装することで、iniファイルが存在しない場合や、指定したセクションやキーが存在しない場合でも、プログラムが適切に動作するようになります。

目次から探す