Python

Pythonで設定ファイルを作って操作する方法を解説!【コピペでOK!】【.iniファイル】

Pythonで設定ファイルをつくる_ini_GoogleColab対応

【記事の内容】

・Pythonで設定ファイル【.ini】を作って操作する方法を解説します!

・これにより、プログラム実行中に発見した良いパラメータなどを自動で保存しましょう!

・以上をGoogleColabにも対応しながら解説します!

これで複雑な設定値を一発で保存する方法をマスターしましょう!

本記事で出来るようになること

configparser_読み込み_書き込み_ゴール

【先にコードをお見せしますね!】

# 設定ファイルを扱うモジュールをインポート
import configparser

# ConfigParserのインスタンス(特定の機能を持った変数)を取得
config = configparser.ConfigParser()

# 用意したconfig_1.iniを読み出し
config.read("config_1.ini")

# 変数Config_1の中から、"BASE"セクションの"speed"と"weight"項目の内容を取り出し
cfg_read_1 = config["BASE"]["speed"]
cfg_read_2 = config["BASE"]["weight"]

# 変数の内容を出力
print("cfg_read_1 =", cfg_read_1)
print("cfg_read_2 =", cfg_read_2)

# 変数の内容を変更
cfg_read_1 = int(cfg_read_1) + 100
cfg_read_2 = int(cfg_read_2) + 40

# configの各項目に上書き
config["BASE"]["speed"] = str(cfg_read_1)
config["BASE"]["weight"] = str(cfg_read_2)

# config_1.iniファイルに上書き
with open("config_1.ini", "w") as file:
    config.write(file)

さぁ、いってみましょう!

準備

設定ファイル【.ini】の作成

[BASE]
speed = 100
weight = 60

初めに、これがPythonの設定アイルの基本形となります。(内容は後で説明します)

これを新規で開いたメモ帳にコピーして、任意の名前で保存してください。

保存したら、名前を“.txt”を含めて消去して,“ config_1.ini ” という名称に変更してください。

その際、『拡張子を変更すると、ファイルが使えなくなる可能性があります。変更しますか?』と注意されますので、“はい”を選んでください。

名前が無事に変わり、ファイルの種類が“構成設定”になったらOKです。

設定ファイルを置く場所

お作り頂いた“ config_1.ini ”は、ご自分のPCの場合は実行ファイルと同じフォルダの中(同階層)に入れて頂き、Google Colabで行う方は、以下の場所に入れてください。

(2パターンありますが、結果的に同じ場所へ入れています)

Google_Colab_iniファイルを入れる場所_1
Google_Colab_iniファイルを入れる場所_2

設定ファイルの読み込み

それでは早速、作った設定ファイルの読み込み行いましょう。

以下のコードを実行して、結果を確かめてみてください。

# 設定ファイルを扱うモジュールをインポート
import configparser

# ConfigParserのインスタンス(特定の機能を持った変数)を取得
config = configparser.ConfigParser()

# 用意したconfig_1.iniを読み出し
config.read("config_1.ini")

# 変数Config_1の中から、"BASE"セクションの"speed"と"weight"項目の内容を取り出し
cfg_read_1 = config["BASE"]["speed"]
cfg_read_2 = config["BASE"]["weight"]

# 変数の内容を出力
print("cfg_read_1 =", cfg_read_1)
print("cfg_read_2 =", cfg_read_2)

【結果】

cfg_read_1 = 100
cfg_read_2 = 60

先ほど“config_1.ini”に記載した値が出力されたと思います。

後半の章でコードごとの解説はしますが、ここでは読み出す部分のコードの構造を図示しますので参考にしてみてください。

読み出し部分の構造

confgparser_セクション_項目の考え方

設定ファイルへの書き込み

それでは書き込みを行いましょう。

先ほどのコードの下に、以下のコードを追加して、実行してください。

# 変数の内容を変更
cfg_read_1 = int(cfg_read_1) + 100
cfg_read_2 = int(cfg_read_2) + 40

# configの各項目に上書き
config["BASE"]["speed"] = str(cfg_read_1)
config["BASE"]["weight"] = str(cfg_read_2)

# config_1.iniファイルに上書き
with open("config_1.ini", "w") as file:
    config.write(file)

実行したら、“config_1.ini”の中身を見てみましょう。

PCの方も、GoogleColabの方も、ファイルをダブルクリックで開けます。

さて、以下のように値が変化したでしょうか。

[BASE]
speed = 200      # もとは100
weight = 100     # もとは60

これで設定ファイルの書き換えができましたね。

以上のコードとiniファイル中の項目を任意の名前に書きかえれば、ご自分の設定ファイルをつくることができます。

読み込み・書き込み共に、【config[“BASE”][“speed”]】の部分の構造は変わりませんので、これを変数の右辺に持ってくれば読み込み、 左辺に持ってくれば書き込みとなります。

【変数 = config[“BASE”][“speed”]】:読み込み

【 config[“BASE”][“speed”] = 変数】:書き込み

※読み込みも書き込みも、型は“str”です!!

筆者のコードを参考にすれば、そのまま型変換されますでご活用ください!

コード解説

モジュールのインポート

# 設定ファイルを扱うモジュールをインポート
import configparser

今回使用したのは【configparser】というモジュールで、本題どおり、設定ファイルを管理するモジュールです。

インスタンスを取得

# ConfigParserのインスタンス(特定の機能を持った変数)を取得
config = configparser.ConfigParser()

ここで【configparser】の機能をインスタンスとして獲得します。

変数【config】は、以降 configparser の持つ機能を自身も持つことになります。

ファイルおよび内容の読み込み

# 用意したconfig_1.iniを読み出し
config.read("config_1.ini")

# 変数Config_1の中から、"BASE"セクションの"speed"と"weight"項目の内容を取り出し
cfg_read_1 = config["BASE"]["speed"]
cfg_read_2 = config["BASE"]["weight"]

# 変数の内容を出力
print("cfg_read_1 =", cfg_read_1)
print("cfg_read_2 =", cfg_read_2)

設定ファイルの操作機能を獲得した変数【config】は、まず【read】機能を使って、設定ファイル“config_1.ini”を読み込みます。

そして、ファイルの内容を取得した【config】の中から、[“BASE”]セクション内の[“speed”]項目の内容を取得します。[“weight”]も同様です。

内容の上書き(プログラム内のみ)

# 変数の内容を変更
cfg_read_1 = int(cfg_read_1) + 100
cfg_read_2 = int(cfg_read_2) + 40

# configの各項目に上書き
config["BASE"]["speed"] = str(cfg_read_1)
config["BASE"]["weight"] = str(cfg_read_2)

先程取得した値を入れた変数に、任意の値を足して、変数に上書きしています。

計算前に【int()】でstr型を整数に変換することを忘れないでください。
各項目に上書きする時はその逆で、【str()】を使い、文字列に戻しています。

しかしここまででは、まだ“設定ファイルからコピーした情報に上書きしただけ”なので、次項でファイルに上書きしましょう。

ファイルに上書き

# config_1.iniファイルに上書き
with open("config_1.ini", "w") as file:
    config.write(file)

最後に用意した設定ファイルへ上書きします。

【config.write(引数)】で、引数にて指定されたファイルへ上書きを行います。

ちなみに、このwithから始まるコードは、“with構文”とも呼ばれ、ファイルを操作する時に多用されるものです。

具体的には、ファイル操作のコードを短縮でき、更には、開いたファイルの閉じ忘れを防いでくれるものになります。

たいへん便利で安全性を高めるので、この類の処理では是非使いましょう!

最後に

Pythonによる設定ファイルの操作、いかがでしたでしょうか。

画像処理や機械学習など複雑なプログラムを実行していると、ふと、重要なパラメータ(設定値)が出てくるものです。

そういった重要な値の記録さえも、Python自身で行えることを本記事でご理解頂ければ幸いです。

それでは、また次回お会いしましょう!