Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonのconfigparserモジュールでINI形式の設定ファイルを読み書きする方法

configparserモジュールとは

Pythonの標準ライブラリに含まれるconfigparserモジュールは、Microsoft Windowsで古くから使われてきたINI形式の設定ファイルを読み書きするための機能を提供します。設定ファイルには通常「.ini」という拡張子が付けられます。

INIファイルの基本構造

INIファイルは複数のセクションで構成され、各セクションは[セクション名]というヘッダー行で始まります。角括弧の中にセクション名を記述します。セクションの後には、=または:で区切られたキーと値のペアが続きます。また、#;で始まる行はコメントとして扱われます。以下にINIファイルのサンプルを示します。

[Settings]
# Set detailed log for additional debugging info
DetailedLog=1
RunStatus=1
StatusPort=6090
StatusRefresh=10
Archive=1
# Sets the location of the MV_FTP log file
LogFile=/opt/ecs/mvuser/MV_IPTel/log/MV_IPTel.log
Version=0.9 Build 4
ServerName=Unknown

[FTP]
# set the FTP server active
RunFTP=1
# defines the FTP control port
FTPPort=21
# Sets the location of the FTP data directory
FTPDir=/opt/ecs/mvuser/MV_IPTel/data/FTPdata
# set the admin Name
UserName=admin
# set the Password
Password=admin

ConfigParserクラスの使い方

configparserモジュールにはConfigParserクラスが定義されており、このクラスが設定ファイルの解析と、解析結果データベースの管理を担当します。ConfigParserオブジェクトは次のように生成します。

parser = configparser.ConfigParser()

ConfigParserクラスの主なメソッド一覧

sections()すべての設定セクション名を返します。
has_section()指定したセクションが存在するかどうかを返します。
has_option()指定したセクション内に指定したオプションが存在するかどうかを返します。
options()指定したセクションの設定オプションの一覧を返します。
read()指定した設定ファイルを読み込んで解析します。
read_file()ファイルオブジェクトとして渡された1つの設定ファイルを読み込んで解析します。
read_string()指定した文字列から設定を読み込みます。
read_dict()辞書から設定を読み込みます。キーはセクション名、値はそのセクションに含まれるキーと値を持つ辞書です。
get()指定したオプションの文字列値を返します。
getint()get()と同様ですが、値を整数に変換して返します。
getfloat()get()と同様ですが、値を浮動小数点数に変換して返します。
getboolean()get()と同様ですが、値を真偽値(True/False)に変換して返します。
items()セクション内の各オプションについて(名前, 値)のタプルのリストを返します。
remove_section()指定したセクションとそのすべてのオプションを削除します。
remove_option()指定したセクションから指定したオプションを削除します。
set()指定したオプションに値を設定します。
write()現在の設定状態を.ini形式で書き出します。

設定ファイルの読み込み例

次のスクリプトは「sampleconfig.ini」ファイルを読み込んで解析し、セクションごとのキーと値を表示します。

import configparser
parser = configparser.ConfigParser()
parser.read('sampleconfig.ini')
for sect in parser.sections():
   print('Section:', sect)
   for k,v in parser.items(sect):
      print(' {} = {}'.format(k,v))
   print()

実行結果

Section: Settings
detailedlog = 1
runstatus = 1
statusport = 6090
statusrefresh = 10
archive = 1
logfile = /opt/ecs/mvuser/MV_IPTel/log/MV_IPTel.log
version = 0.9 Build 4
servername = Unknown

Section: FTP
runftp = 1
ftpport = 21
ftpdir = /opt/ecs/mvuser/MV_IPTel/data/FTPdata
username = admin
password = admin

実行結果を見ると、キー名がすべて小文字に変換されていることが分かります。これはConfigParserのデフォルト動作で、オプション名は内部的に小文字で保存されるためです。

設定ファイルの作成・書き出し方法

write()メソッドを使うと、設定内容をファイルに書き出せます。次のスクリプトでは、パーサーオブジェクトに新しいセクションとオプションを追加し、「test.ini」を表すファイルオブジェクトに書き出しています。

import configparser
parser = configparser.ConfigParser()
parser.add_section('Manager')
parser.set('Manager', 'Name', 'Ashok Kulkarni')
parser.set('Manager', 'email', 'ashok@gmail.com')
parser.set('Manager', 'password', 'secret')
fp=open('test.ini','w')
parser.write(fp)
fp.close()

補足:getboolean()で使える値

getboolean()メソッドは、"yes"/"no"、"on"/"off"、"true"/"false"、"1"/"0"といった文字列をTrue/Falseに変換できます。大文字・小文字は区別されないため、設定ファイル側の表記ゆれを気にせずに真偽値として取得できるのが便利です。

  1. Pythonで作るWebサイトブロッカー ― 業務時間中にSNSへのアクセスを自動遮断する方法

    大手IT企業で働いたことがある方なら、FacebookやYouTube、InstagramといったSNS系のWebサイトが社内からアクセスできないよう制限されていることに気づいた経験があるかもしれません。こうした制限は、サードパーティ製アプリに頼らなくても実現できます。自分専用のオリジナルツールを作れば、好きなWebサイトを自由にブロックできるのです。しかもPythonでWebサイトブロッカーを開発するのは、それほど難しいことではありません。この記事では、指定したWebサイトをブロックするPythonスクリプトの作り方を解説します。前提条件Python 3.x がインストールされていることPy

  2. Pythonで作る誕生日リマインダーアプリケーションの完全ガイド

    この記事では、Pythonを使って誕生日リマインダーアプリケーションを作成する方法を解説します。当日の誕生日を自動的にチェックし、デスクトップ通知で教えてくれる便利なツールを、初心者でも理解できるようにステップごとに説明していきます。 課題の定義 まず、このアプリケーションに求められる要件を整理しましょう。 Pythonで、当日が登録済みの人物の誕生日かどうかを判定できること 誕生日の人物がいれば、その人の名前とともにシステムへ通知を送信すること このアプリケーションでは、日付・月・氏名を保存した「ルックアップファイル(照合用データファイル)」が必要です。ファイルのイメージは以下の通りです