[Python] INI(環境設定ファイル)を扱う方法
こんにちは。明月です。
この投稿はPythonでINI(環境設定ファイル)を扱う方法に関する説明です。
以前、C言語やC++言語プログラムで環境ファイル設定タイプでInitialization設定ファイルということです。
INIファイルの拡張子は普通はiniでなっていますが、confやcfgに使う時もあります。
INIの設定構造はセッションとキーになっています。コメントはセミコロン(;)を使います。
apacheなどini設定ファイルで環境ファイルがまだあります。
なのでCIツール(jenkins)でビルドする時、Pythonで自動環境ファイル設定スクリプトを作ることでよく使います。
# iniを扱うためにconfigparserをimportする。
import configparser
# configparserのConfigParser関数を呼び出す。
config = configparser.ConfigParser()
# configparserはリストのキーはセッションを設定する。ディクショナリのキーで環境ファイルのキーを設定するし、値で環境ファイルの値になる。
config["DB"] = { "test" : "hello"}
# IOを利用して出力する。
with open('example.ini', 'w') as handle:
# パーサにIOを入れて出力する。
config.write(handle)
configをリストのキーでセッション名を設定します。
そのリストでディクショナリを設定すればディクショナリのキー、値によって環境ファイルを設定します。
今回はINIファイルを読み込んでPythonで使いましょう。
# iniを扱うためにconfigparserをimportする。
import configparser
# configparserのConfigParser関数を呼び出す。
config = configparser.ConfigParser()
# example.iniファイルを読み込む。
config.read('example.ini')
# セッションの種類を取得してコンソールに出力する。
print(config.sections())
# DBセッションのキーを取得する。
keys = config["DB"].keys()
# 繰り返しする。
for key in keys:
# キーを通って値を出力する。
print("key : " + key + ", value :" + config["DB"][key])
iniを読み込んでsectionsの関数を通ってセッションキーを取得します。そしてkeysの関数で環境ファイルのキーを取得することができるし、そのキーを通って値を出力することができます。
PHPをインストールするとphp.iniファイルがあります。
Pythonを利用してphp.iniファイルを扱いましょう。
上のイメージはphp.iniをメモ帳で読み込むことです。親切にコメントがあります。でも、コメントが多すぎです。なので逆に値を探すのが大変です。
私もたまにコメントが多すぎてコメントをすべて消したい時があります。
# iniを扱うためにconfigparserをimportする。
import configparser
# configparserのConfigParser関数を呼び出す。
config = configparser.ConfigParser()
# php.iniファイルを読み込む。
config.read('php.ini')
# IOを利用して出力する。
with open('phpex.ini', 'w') as handle:
config.write(handle)
上みたいにiniファイルを読み込んで再作成するとコメントがすべてなくなって綺麗なINIファイルができると思いました。でも、エラーが発生しました。
調べるとINIファイルでセッションとキー単位で同じキーがあります。
実際INIでセッションかつキーはユニックなのでデータが複数にあることは存在しません。
でも、php.iniでは使います。
インタネットを調べると私と同じ問題で解決したことがあります。
link - https://stackoverflow.com/questions/15848674
# iniを扱うためにconfigparserをimportする。
import configparser
# 重複キーをlistで解決する方法
class MultiValueDict(dict):
def __setitem__(self, key, value):
if isinstance(value, list) and key in self:
self[key].extend(value)
else:
super().__setitem__(key, value)
# ここでstrict、 empty_lines_in_values、 dict_typeの三つのオプションを設定しなければならない。
config = configparser.RawConfigParser(strict=False, empty_lines_in_values=False, dict_type=MultiValueDict)
# iniファイルを読み込む。
config.read('php.ini')
# IOを利用して出力する。
with open('phpex.ini', 'w') as handle:
config.write(handle)
結果はコメントが削除されてINIが新しく作成されました。でも重複されたextensionのキーでは可笑しく入力されています。
# iniを扱うためにconfigparserをimportする。
import configparser
# 重複キーをlistで解決する方法
class MultiValueDict(dict):
def __setitem__(self, key, value):
if isinstance(value, list) and key in self:
self[key].extend(value)
else:
super().__setitem__(key, value)
# ここでstrict、 empty_lines_in_values、 dict_typeの三つのオプションを設定しなければならない。
config = configparser.RawConfigParser(strict=False, empty_lines_in_values=False, dict_type=MultiValueDict)
# iniファイルを読み込む。
config.read('php.ini')
# IOを利用して出力する。
with open('phpex.ini', 'w', newline = '') as handle:
# セッションキーを取得する。
sessionkeys = config.keys()
# キー別で繰り返す。
for sessionkey in sessionkeys:
# セッションキーをfileで出力する。形は[セッションキー]だ。
print("["+sessionkey+"]", file=handle)
# セッションキーでキーを取得する。
keys = config[sessionkey].keys()
# キー別で繰り返す。
for key in keys:
# 各キーの値を改行する、リストを作って出力する。
for item in config[sessionkey][key].split("\n"):
# 出力する。
print(key+"="+item,file=handle)
コメントが除いたiniファイルが生成されました。
ここまでPythonでINI(環境設定ファイル)を扱う方法に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Python] Seleniumライブラリを使う方法(自動ウェブテスト、ウェブスクレイピング)2021/10/25 19:29:00
- [Python] メール(smtplib)を送信する方法2020/07/27 18:38:43
- [Python] HttpConnection(requestsモジュール)でウェブサーバーで接続する方法2020/07/20 14:41:51
- [Python] Excel(openpyxl)を扱う方法2020/07/16 16:40:31
- [Python] ファイル圧縮、解凍(zipfile)する方法2020/07/14 19:14:22
- [Python] Apache cgiでPythonを使う方法2020/07/09 19:58:19
- [Python] Web serverを起動する方法(http.server)2020/07/09 00:13:13
- [Python] WebSocketを使う方法2020/07/07 17:29:18
- [Python] PythonとJavaのソケット通信する方法2020/07/03 18:35:50
- [Python] PythonとC#のソケット通信2020/07/01 19:28:22
- [Python] INI(環境設定ファイル)を扱う方法2020/06/30 18:26:01
- [Python] Jsonを扱う方法2020/06/29 19:18:15
- [Python] XMLファイルを扱う方法2020/06/26 19:18:14
- [Python] IOを利用してCSVファイルを扱う方法2020/06/25 18:20:30
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07