Pythonの設定ファイル管理まとめ(settings / ini / json 形式別) [コピペサンプルコード付き]
すぐ実装できる!初心者向け。Pythonの設定ファイル管理についてまとめました。
Pythonでプログラムを書く際に、プログラムで使用する設定値を外部ファイルで管理したいケースは多いと思います。
Pythonの設定ファイル読み込みはいくつかの方法があり、大半の形式のファイルに対応可能です。
本記事ではPythonでの設定ファイル管理について、形式別(settings.py、ini、json)の特徴などを整理してサンプルコードをまとめています。
実行環境はローカルPCのWindows環境で実行しています。
環境
- Windows 10 Pro
- Python 3.6.4
①「pyファイルから読み込む(settings.py)」:非常に簡単に実装でき設定ファイルの共有も簡単
まずは「settings.pyから読み込む」方式です。
最も簡単に使える方式なので、多くのライブラリやソフトウェアで利用されています。
Pythonソースコード ※ダブルクリックでコピペできます
1 2 3 4 5 | importsettings print(settings.data1) print(settings.data2) print(settings.data3) |
設定ファイル(settings.py)
1 2 3 | data1 = 10 data2 = 20 data3 = 30 |
実行結果
1 2 3 | 10 20 30 |
使い方は簡単です。
作成するPythonプログラムと同じディレクトリに、ファイル名「settings.py」の設定ファイルを置きます。
あとは「import settings」と冒頭に記述するだけで設定情報を読み込むことができます(Pythonプログラムのimportの仕組みを利用している)。
設定ファイルの共有も簡単なので、とりあえず外部ファイル化したい場合に最適でしょう。
デメリットとしては、ファイル名の拡張子が「.py」なので、Pythonのプログラムに詳しくない方が見たときに設定ファイルであることが分かりにくい事が挙げられます。
設定ファイルが存在しない場合、以下のエラーが表示されます。ファイル名が間違っていないか、ディレクトリが同じかどうか確認しましょう。
Traceback (most recent call last):
File “sample1.py", line 1, in
import settings
ModuleNotFoundError: No module named 'settings’
②「jsonファイルから読み込む(.json)」:APIキーなどの情報の管理に便利
次は「jsonファイルから読み込む(.json)」方式です。
TwitterのAPIなど、昨今ではAPIが用意されているサービスも増えました。PythonプログラムからAPIを叩くことで、対象サービスのデータを取得したり操作したりすることができるのです。
このようなサービスの多くではAPIキーの発行時に、json形式のファイルをダウンロードできるようになっています。ダウンロードしたファイルを直接使いたい場合には本項の方式を活用しましょう。
Pythonソースコード ※ダブルクリックでコピペできます
1 2 3 4 5 6 7 8 | importjson json_file=open('settings.json','r') json_data=json.load(json_file) print(json_data["data1"]) print(json_data["data2"]) print(json_data["data3"]) |
設定ファイル(settings.json)
1 2 3 4 5 | { "data1":"10", "data2":"20", "data3":"30" } |
実行結果
1 2 3 | 10 20 30 |
作成するPythonプログラムと同じディレクトリに、jsonファイルを置き、openで開きます。
oepnで開くので、絶対パス指定/相対パス指定などをすれば、同じディレクトリである必要はありません。ただし、カレントディレクトリがわかりやすいと思います。
読み込んだ後はjson.loadします。キーと値のセット配列(dictionary)で返ってきます。
自作の設定ファイルとしてあえてjsonファイルを使う人は少ないかもしれません。
ただし、WEBサービスのデータのやりとりはjsonが主流となっています。jsonファイルを扱う機会は多いと思いますので、覚えておくと良いかと思います。
設定ファイルが存在しない場合、以下のエラーが表示されます。ファイル名が間違っていないか、ディレクトリが同じかどうか確認しましょう。
Traceback (most recent call last):
File “sample2.py", line 3, in
json_file = open('settings.json’, 'r’)
FileNotFoundError: [Errno 2] No such file or directory: 'settings.json’
③「iniファイルから読み込む(ConfigParser)」:DEFAULT設定やセクション分けなど複雑な設定値管理に。
最後に「iniファイルから読み込む(.ini)」方式です。ConfigParserというライブラリを利用します。
Pythonソースコード ※ダブルクリックでコピペできます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | importconfigparser inifile=configparser.SafeConfigParser() inifile.read('settings.ini') print('# SECTION1 の設定読み込み') print(inifile.get('SECTION1','data1')) print(inifile.get('SECTION1','data2')) print(inifile.get('SECTION1','data3')) print('# SECTION2 の設定読み込み') print(inifile.get('SECTION2','data1')) print(inifile.get('SECTION2','data2')) print(inifile.get('SECTION2','data3')) |
設定ファイル(settings.ini)
1 2 3 4 5 6 7 8 9 10 11 12 | [DEFAULT] data1 = 10 data2 = 20 data3 = 30 [SECTION1] data1 = 40 data2 = 50 data3 = 60 [SECTION2] data3 = 70 |
実行結果
1 2 3 4 5 6 7 8 | # SECTION1 の設定読み込み 40 50 60 # SECTION2 の設定読み込み 10 20 70 |
import configparserとした後に、iniファイルを読み込み、inifile.getで設定値が取得できます。
この方式の優れている点は、DEFAULT設定&セクション管理が出来る点にあります。
設定ファイルに[DEFAULT][SECTION1][SECTION2]の3つのセクションを設定しています。[DEFAULT]では標準となる初期設定値を指定します。そして、各セクションでは[DEFAULT]に対して上書きする項目のみを指定するだけでOKです。
サンプルだと[SECTION2]はdata3しか設定していませんが、data1、data2は[DEFAULT]で設定している値が取得出来ていることがわかります。
ConfigParserはパターンが分岐するような複雑な設定ファイルを作りたい場合に向いています。例えば開発環境と顧客環境で設定値を分けて管理したい場合などに使えるでしょう。
設定ファイルが存在しない場合、以下のエラーが表示されます。ファイル名が間違っていないか、ディレクトリが同じかどうか確認しましょう。
Traceback (most recent call last):
File “sample3.py", line 7, in
print(inifile.get('SECTION1’, 'data1’))
File “C:\Python\lib\configparser.py", line 781, in get
d = self._unify_values(section, vars)
File “C:\Python\lib\configparser.py", line 1141, in _unify_values
raise NoSectionError(section)
configparser.NoSectionError: No section: 'SECTION1’
configparser.SafeConfigParser()ではなく、configparser.ConfigParser()と説明している書籍などもありますが、Python3.X系ではSafeConfigParserを使った方が良いと思います
※設定値が取得できないときにエラーにならない場合は、configparser.ConfigParser()を使っている可能性があります
【参考】初心者向け「Pythonサンプルコード」シリーズ記事
プログラマー以外の方でも手軽にプログラミングを始める時代です。その中でもPythonは人気のプログラム言語の1つでしょう。
Pythonは使いやすいと思いますが、やはりビギナーの場合は実際に動く具体的なサンプルが欲しいところです。
このような初心者さんの要望を鑑み、他にも「Pythonサンプルコード」シリーズとしてブログ記事を公開しています。よろしければ読んでください。