Python

【プログラミング】リアルタイムでjsonファイルの値を書き込み、別のプログラムから値を読み込みしてみよう。

2024.12.07 土
17 view
【プログラミング】リアルタイムでjsonファイルの値を書き込み、別のプログラムから値を読み込みしてみよう。

jsonを使ったPythonプログラムから別のPythonプログラムへの値受け渡しを実行したことはあるだろうか。

グローバル変数を使えば良いときもあれば、外部のjsonなどに書き込んだ方が良いときなど、状況は様々だ。

どんな状況でも対応できるように、今回は外部のjsonに書き込み、別のプログラムから値を取得する方法を紹介する。

JSONとは

JSONとは、JavaScript Object Notationの略称であり、軽量で人間が読み書きしやすく、機械が解析しやすいデータフォーマットだ。

データ交換の標準形式として広く使われており、特にWebアプリケーションやAPIのデータ通信において主流の形式です。

サンプルコード

スクリプトファイルの用意

まずは、Pythonのファイルを用意する。

今回は、書き込み用と読み込み用の2つのPythonスクリプトを用意する。

write.py

#write.py

write.pyが書き込み用のPythonスクリプトだ。

read.py

#read.py

read.pyが読み込み用のPythonスクリプトだ。

次に、JSONファイルを用意する。

data.json

{
    "value": 0
}

data.jsonのvalueの値を更新するために、初期値として0を入力しておく。

これで準備は完了だ。

JSONに値を書き込むコード

write.pyを実行し、data.jsonのvalueの値を更新するコードを書く。

#write.py
import json
import os

current_path = os.path.dirname(os.path.abspath(__file__))

file_name = "data.json"
file_path = os.path.join(current_path, file_name)

print("値を入力してJSONファイルを更新します。終了するには 'exit' と入力してください。")

while True:
    user_input = input("新しい値を入力: ")
    if user_input.lower() == "exit":
        print("終了します。")
        break

    try:
        new_value = int(user_input)
    except ValueError:
        print("数値を入力してください。")
        continue

    data = {}
    try:
        if os.path.exists(file_path):
            with open(file_path, "r", encoding="utf-8") as file:
                data = json.load(file)
    except json.JSONDecodeError:
        print(f"{file_path} は正しいJSON形式ではありません。データを初期化します。")

    data["value"] = new_value

    try:
        with open(file_path, "w", encoding="utf-8") as file:
            json.dump(data, file, ensure_ascii=False, indent=4)
        print(f"{file_path} に値を更新しました: {new_value}")
    except Exception as e:
        print(f"エラーが発生しました: {e}")

コードの説明

モジュールの読み込み

  • osでファイルの場所を扱い
  • jsonでデータを保存・読み込みします。

ファイルの場所を設定

  • スクリプトのあるディレクトリにdata.jsonを作成する。

ユーザー入力の受け付け

  • 数値を入力するとファイルが更新される。
  • exitと入力すると終了する。

データの読み込みと初期化

  • ファイルがあれば読み込み、なければ新しく作成する。
  • JSON形式がおかしい場合は初期化する。

データの保存

  • 入力された値をJSON形式で保存する。

エラーハンドリング

  • 数字以外の入力やファイル操作時のエラーに対して適切なメッセージを表示する。

JSONの値を取得するコード

read.pyを実行し、data.jsonのvalueの値を取得するコードを書く。

#read.py
import json
import os

current_path = os.path.dirname(os.path.abspath(__file__))

file_name = "data.json"
file_path = os.path.join(current_path, file_name)

print("エンターを押すとJSONファイルの値を確認します。終了するには 'exit' と入力してください。")

while True:
    user_input = input("エンターキーを入力")
    if user_input.lower() == "exit":
        print("終了します。")
        break

    try:
        with open(file_path, "r", encoding="utf-8") as file:
            data = json.load(file)
            value = data.get("value")
            print(f"value: {value}")
    except FileNotFoundError:
        print(f"{file_path} が見つかりませんでした。")
    except json.JSONDecodeError:
        print(f"{file_path} は正しいJSON形式ではありません。")

コードの説明

モジュールの読み込み

  • osでファイルパスを操作する。
  • jsonでデータを読み込む。

ファイルの場所を設定

  • スクリプトのあるディレクトリにあるdata.jsonを対象にする。

ユーザーの操作

  • エンターキーを押すとJSONファイルを読み込み、値を表示する。
  • exitを入力するとプログラムが終了する。

データの読み込み

  • ファイルが存在し、正しいJSON形式ならvalueを取得して表示する。

エラーハンドリング

  • ファイルが見つからない場合やJSONの形式が正しくない場合にエラーメッセージを表示する。

サンプルコードの動作確認

コードのダウンロードはこちら (github.com)

これらのコードはGithubにアップロードしている。

コードを書くのが面倒な方は、上記のページでダウンロードして使用してみるのも良いだろう。

コードもすべてアップロードしているため、必要な方はぜひ使ってみてくれ。

まとめ

いかがだっただろうか。

無事Pythonを使い、JSONファイルへ値の書き込みと読み込みが行えただろうか。

プログラムを実行中に値を書き換えてもリアルタイムで読み込みできるため、コンフィグファイルとして使えるのではないだろうか。

かなり汎用性の高いコードだから是非使ってみてくれ。

コメントはこちらから

必須コメント

必須ハンドルネーム