注目キーワード

【Python】configファイルの読み込み・書き込みはconfigparserを使おう

こんにちは、Tamagoです。

Webアプリケーションをなどを開発するうえで、データベースの接続先などはconfigファイルに定義しておいたほうが、後から変更するときに便利です。

今回は、configファイルを操作するモジュール 「configparser」の使いかたについてサンプルソースを使いながら説明していきたいと思います。

この記事で具体的に紹介するサンプルは以下

  • configfileの読み込み方
  • configfileの書き込み方

対象レベル

Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。

詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。

サンプルソースを読むうえで理解しておきたいこと

基本的にこの章の内容は読み飛ばしてOKです。サンプルソースでわからないところがあれば参照してみてください。

configファイルの説明

まずは、configファイルについて説明していきたいと思います。

下の「config.ini」はPythonでよく使うconfigファイルになります。

[section1]option1 = 10option2 = value1[section2]option1 = 20option2 = value2

1行目の[]で囲われた定義をセクションと言います。

そして2行目、3行目の定義をオプションと言います。

なので、2行目を例にすると、「section1」セクションの「option1 」オプションは10といった感じです。

[セクション]オプション = 設定値

configparserを使った書き込み処理

以下のサンプルソースは先ほど紹介した「 config.ini 」を作成するときに使ったソースになります。

2行目で「configparser」をインポートします。

そして3行目で「 RawConfigParser() 」を使ってconfigファイルを操作するオブジェクトを生成します。

import configparserconfig = configparser.RawConfigParser()

6行目〜9行目で一つのセクションの設定をしています。

「 add_section(section1) 」で「 section1 」を追加しています。

そして8行目の「set(セクション,オプション,設定値)」で「10」を設定しています。数値も文字列も設定可能です。

section1 = 'section1'config.add_section(section1)config.set(section1, 'option1', 10)config.set(section1, 'option2', 'value1')

16行目、17行目でファイルに書き込みます。

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

それでは、実際に動かしてみます。

最初にプログラムを動かす前に「config.ini」が存在していないことを確認します。

プログラム実施前

そして「sample_config_write.py」を実行します。

プログラム実施

プログラム実行後に「config.ini」が作られています。

ファイルを開くと以下のようになっています。冒頭で紹介した内容と同じですね。

configparserを使った読み込み処理

次は、configファイルの読み込みについて説明していきます。

値の取得方法

configファイルの値を読み込みサンプルは以下になります。

まず、「 configparser 」(2行目)をインポートします。

4行目でオブジェクトを生成します。5行目で読み取りたいファイルを指定します。

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

8行目では「’section1’」セクションの「’option1’」オプションの値を取得しています。値を取得するには「操作オブジェクト.get(セクション,オプション)」で取得します。9行目、12行目、13行目も同様にそれぞれの値を取得しています。

section1 = 'section1'print(config.get(section1, 'option1'))print(config.get(section1, 'option2'))

それでは、プログラムを実行してみます。正しく値が取得されていますね。

スポンサーリンク

sample_config_read_1.py実行

セクション・オプションの存在チェック

次はセクション・オプションの存在有無を確認する方法です。

5行目までは先ほどのサンプルと同じなので説明は省きます。

「 has_section 」を使うとセクションの有無を確認できます。サンプルソースでいうと7行目、8行目が該当箇所です。

「 section1 」は存在するので「True」、「 section3 」は存在しないので「False」が表示される想定です。

print(config.has_section('section1'))print(config.has_section('section3'))

「 has_option 」を使うとオプションの有無を確認できます。

使い方は「 has_option(セクション, オプション )」です。

print(config.has_option('section1', 'option1'))print(config.has_option('section1', 'option3'))

実際に動かしてみます。

正しく判定されていますね。

sample_config_read_2.py実行

その他項目取得方法の紹介

そのほかに便利な関数も紹介します。

セクションすべてを表示する方法。(7行目)

print(config.sections())

指定したセクションのすべてのオプションを取得する方法(8行目)

print(config.options('section1'))

指定したセクションのすべてのオプションと設定値を取得する方法(9行目)

print(config.items('section1'))

実行結果は以下

sample_config_read_3.py実行

まとめ

configファイルの読み込み・書き込みには「configparser」を使う。

「read(ファイル名)」で読み取りの準備が出来る。

「get(セクション,オプション)」で設定値を取得する。

「 has_section(セクション) 」、「 has_option(セクション, オプション) 」で存在チェックをおこなう。