iniファイルの読み書き – 【Pythonプログラミング2 ~応用編~】

PROGRAMMING

Pythonで iniファイルを読み書きする方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。

1.演習用プログラムとiniファイルのダウンロード

演習用プログラム( practice17.py )と iniファイル( practice17.ini )をダウンロードします。
演習用プログラムは テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更します。
practice17.py、practice17.ini を Python をインストールしたフォルダ(今回は C:\Python)に置きます。



2.ソースコードの表示とiniファイルの内容の確認

メモ帳を使って、演習用プログラム( practice17.py )を開きます。

practice17.py

practice17.py


メモ帳を使って、iniファイル( practice17.ini )の内容を確認します。
practice17.ini

practice17.ini


先頭が ";" になっている行は、コメント行です。
iniファイルの構成は、以下の通りです。
[セクション]
キー = 値

3.iniファイルの読み込み

最初に iniファイルを読み込む方法を見ていきます。

① iniファイルの読み込み

まずは、コマンドプロンプト で practice17.py を実行します。
プログラムを実行する方法は、こちらの記事『ファイルに保存されたプログラムの実行』を参照します。
以下のように表示されます。

C:\Users\kotablog>python C:\Python\practice17.py

*** iniファイルの読み込み ****

セクションの存在確認を行います
セクション PC は存在します
セクション 時刻 は存在します

セクション内のキーの存在確認を行います
セクション PC のキー OS は存在します
セクション 時刻 のキー 前回起動 は存在します

値を取得します
PCのOSは、Windows11 です
前回起動時刻は、2024/10/10 02:15 です

 
プログラムソースを確認します。


01 # -*- coding: utf-8 -*-
02 """
03 演習プログラム17
04 
05   iniファイルの読み書き
06 
07 """
08 import sys           # sysモジュールのインポート
09 import configparser  # iniファイルアクセス用
10 import datetime      # 現在日時取得用
11 

ライブラリのインポート
09行目で iniファイルにアクセスするときに必要な configparserライブラリをインポートしています。
10行目で 現在日時取得時に必要な datetimeライブラリをインポートしています。


12 print("\n*** iniファイルの読み込み ****")
13 
14 file_name1 = r"C:\Python\practice17.ini"  # iniファイルのフルパス名
15 
16 # セクションのセット
17 SECTION1 = 'PC'
18 SECTION2 = '時刻'
19 

セクションのセット
17行目と18行目で 'PC'セクションを 変数 SECTION1 に、'時刻'セクションを 変数 SECTION2 にセットしています。


20 # iniファイルの読み込み
21 config = configparser.ConfigParser()
22 config.read(file_name1)
23 

iniファイルの読み込み
21行目と22行目で iniファイルを読み込んでいます。


24 # セクションが存在するかの確認
25 print("\nセクションの存在確認を行います")
26 if config.has_section(SECTION1):
27   print("セクション " + SECTION1 + " は存在します")
28 else:
29   print("セクション " + SECTION1 + " は存在しません")
30   sys.exit()
31 
32 if config.has_section(SECTION2):
33   print("セクション " + SECTION2 + " は存在します")
34 else:
35   print("セクション " + SECTION2 + " は存在しません")
36   sys.exit()
37 

セクションが存在するかの確認
セクションにアクセスする前に、iniファイル内にセクションが存在しているかを確認することができます。
26行目と32行目の config.has_section(セクション) が True の場合は、セクションが存在しています。


38 # セクション内のキーが存在するかの確認
39 print("\nセクション内のキーの存在確認を行います")
40 key1 = "OS"
41 if key1.lower() in list(map(lambda x:x[0], config.items(SECTION1))):
42   print("セクション " + SECTION1 + " のキー " + key1 + " は存在します")
43 else:
44   print("キー " + key1 + " は存在しません")
45   sys.exit()
46 
47 key2 = "前回起動"
48 if key2.lower() in list(map(lambda x:x[0], config.items(SECTION2))):
49   print("セクション " + SECTION2 + " のキー " + key2 + " は存在します")
50 else:
51   print("キー " + key2 + " は存在しません")
52   sys.exit()
53 

セクション内のキーが存在するかの確認
キーにアクセスする前に、セクション内にキーが存在しているかを確認することができます。
41行目と48行目の キー.lower() in list(map(lambda x:x[0], config.items(セクション))) が True の場合は、キーが存在しています。


54 # 値の取得
55 print("\n値を取得します")
56 
57 value_OS = config.get(SECTION1, 'OS')
58 print("PCのOSは、" + value_OS + " です")
59 
60 value_前回起動 = config[SECTION2]['前回起動']
61 print("前回起動時刻は、" + value_前回起動 + " です")
62 
63 #終了1
64 sys.exit()

値の取得
57行目の config.get(セクション, キー) もしくは、
60行目の config[セクション][キー] で、値を取得することができます。

4.iniファイルの書き込み

次に iniファイルへ書き込む方法を見ていきます。

① iniファイルの書き込み

ソースコード #終了1 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
 Ctrl  キーを押しながら、 S  キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3  キーを押して、 Enter  キーを押下します。
以下のように表示されます。

*** iniファイルの書き込み ****

セクション 時刻 の前回起動 の値を現在時刻にします

 
エクスプローラから、practice17_2.ini を開いて内容を確認してください。
※本来であれば、practice17.ini に上書き保存するところですが、本演習では practice17_2.ini に書き込んでいます。

前回起動の値が書き換わっていますが、コメント行が消えています。

プログラムソースを確認します。


66 print("\n*** iniファイルの書き込み ****")
67 
68 file_name2 = r"C:\Python\practice17_2.ini"  # iniファイルのフルパス名
69 
70 # 現在時刻の取得
71 strNow = datetime.datetime.now().strftime("%Y/%m/%d %H:%M")
72 
73 # セクション時刻の前回起動を書き換え
74 print("\nセクション " + SECTION2 + " の" + key2 + " の値を現在時刻にします")
75 config[SECTION2]['前回起動'] = strNow
76 
77 with open(file_name2, 'w') as f:            # iniファイルの書き込み
78   config.write(f)
79 
80 #終了2
81 sys.exit()

71行目で 現在時刻を取得して 変数 strNow にセットしています。
75行目で SECTION2 の キーが 前回起動 の値を 現在時刻に置き換えています。
77行目と78行目で iniファイルに書き込んでいます。

5.書き込み時にコメントを残す

① セクションの外のコメントを残す

ソースコード #終了2 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
 Ctrl  キーを押しながら、 S  キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3  キーを押して、 Enter  キーを押下します。
以下のように表示されます。

*** 書き込み時にコメントを残す ****

セクションの外のコメントを残します

 
エクスプローラから、practice17_2.ini を開いて内容を確認してください。

コメント行が残っています。

プログラムソースを確認します。


83 print("\n*** 書き込み時にコメントを残す ****")
84 
85 # セクションの外のコメントを残す
86 print("\nセクションの外のコメントを残します")
87 with open(file_name2, 'w') as f:  # iniファイルを開く
88   f.write(';\n')
89   f.write('; 演習プログラム17\n')
90   f.write(';\n')
91   f.write(';  iniファイルの読み書き\n')
92   f.write(';\n')
93   config.write(f)                 # iniファイルの書き込み
94 
95 sys.exit()

93行目の iniファイルの内容を書き込む前に、
88行目から92行目で セクションの外のコメントを書いています。
 

<openpyxlを使った Excelファイルの読み書き iniファイルの読み書き
タイトルとURLをコピーしました