こんにちは、Tech Samuraiです!
前回の記事「datetimeで時間マスター!オリジナル・カウントダウンタイマーを作ろう」では、時間という概念をプログラムで扱う方法を探検しましたね。
これまでのプロジェクトで、プログラムを実行するたびに変数の値がリセットされてしまうことに気づいたかもしれません。RPGプロジェクトのキャラクターデータや、アプリのユーザー設定など、「プログラムを終了しても、この状態を覚えておいてほしい!」と思うことは多々あります。
今回のテーマは、プログラムに**永続的な記憶力**を与えるための技術です。Pythonの**`json`**(ジェイソン)ライブラリを使い、プログラムのデータ(特に辞書)をファイルに保存し、次回起動時にそれを読み込んで復元する、**簡易設定ファイルマネージャー**を作成します。さあ、あなたのプログラムにセーブ&ロード機能を実装しましょう!
JSONってなんだ? データのための世界共通語
JSON (JavaScript Object Notation)** は、データを表現するための、シンプルで分かりやすいテキストベースの形式です。もともとはJavaScriptの記法が元になっていますが、今やPythonを含む多くのプログラミング言語で標準的に使われる「データ交換のための世界共通語」となっています。
Pythonの**辞書**と非常によく似ているため、私たちPython使いにとっては非常に親しみやすい形式です。
Pythonの辞書 vs JSON形式
# Pythonの辞書
config_dict = {
"user_name": "Tech Samurai",
"theme": "dark",
"font_size": 16,
"show_welcome_message": True
}
{
"user_name": "Tech Samurai",
"theme": "dark",
"font_size": 16,
"show_welcome_message": true
}
キーがダブルクォートで囲まれている、`True`が`true`になる、といった僅かな違いはありますが、構造はそっくりですね。`json`ライブラリは、この相互変換を自動で行ってくれます。
ステップ1:Pythonの辞書をJSONファイルに保存する (`json.dump`)
まず、Pythonの辞書データをJSONファイルとして書き出す方法です。これには`json.dump()`関数を使います。また、ファイルを安全に扱うためのお作法である`with open(…)`も一緒に使いましょう。
import json
# 保存したい設定データ(辞書)
config_data = {
"user_name": "Tech Samurai",
"theme": "dark",
"font_size": 16,
"show_welcome_message": True
}
# 'config.json' という名前のファイルを書き込みモード('w')で開く
# encoding='utf-8' は日本語の文字化けを防ぐためのおまじない
with open('config.json', 'w', encoding='utf-8') as f:
# json.dump()で、辞書をファイルに書き込む
# indent=4: 人間が読みやすいように4スペースでインデントする
# ensure_ascii=False: 日本語をそのまま保存する
json.dump(config_data, f, indent=4, ensure_ascii=False)
print("設定を config.json に保存しました。")
このスクリプトを実行すると、同じフォルダに`config.json`というファイルが作成され、中身が綺麗にフォーマットされて保存されているはずです。
ステップ2:JSONファイルからデータを読み込む (`json.load`)
次に、保存した`config.json`ファイルからデータを読み込み、Pythonの辞書として復元します。これには`json.load()`を使います。
import json
# 'config.json' を読み込みモード('r')で開く
try:
with open('config.json', 'r', encoding='utf-8') as f:
# json.load()で、ファイルからデータを読み込み、辞書に変換
loaded_config = json.load(f)
print("config.json から設定を読み込みました。")
print(loaded_config)
print(f"ようこそ、{loaded_config['user_name']}さん!")
except FileNotFoundError:
print("エラー: config.json が見つかりません。")
ステップ3:設定マネージャーとして実践する
これまでの知識を組み合わせて、プログラムの起動回数を記録する、実用的なスクリプトを作ってみましょう。
import json
CONFIG_FILE = 'app_config.json'
def load_config():
"""設定ファイルを読み込む。なければデフォルト設定を返す。"""
try:
with open(CONFIG_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
except FileNotFoundError:
# ファイルがなければ、これが初回起動
return {'launch_count': 0, 'user': 'default'}
def save_config(config):
"""設定ファイルを保存する。"""
with open(CONFIG_FILE, 'w', encoding='utf-8') as f:
json.dump(config, f, indent=4, ensure_ascii=False)
# --- メインの処理 ---
# 1. 設定を読み込む
config = load_config()
print(f"現在の設定: {config}")
# 2. 設定を更新する
config['launch_count'] += 1
print(f"これは {config['launch_count']} 回目の起動です。")
# 3. 更新した設定を保存する
save_config(config)
print("新しい設定を保存しました。")
このスクリプトを実行するたびに、「〇回目の起動です」の数字が1ずつ増えていくはずです。プログラムが自分の状態を「記憶」している証拠ですね!
まとめ
今回は、Pythonの標準ライブラリ`json`を使い、プログラムに「記憶力」を与える方法を探検しました。
- 人間にもプログラムにも読みやすい**JSON**というデータ形式。
- Pythonの辞書をJSONファイルに保存する
json.dump()
- JSONファイルをPythonの辞書として読み込む
json.load()
- ファイルを安全に扱うための
with open(...)
構文。
これであなたは、プログラムの状態をファイルにセーブ&ロードする基本的な仕組みをマスターしました。RPGのセーブデータ、Webアプリのユーザー設定、ツールの設定情報など、あらゆる場面でこの技術は活躍します。
これにて、Python標準ライブラリのミニプロジェクトシリーズは一区切りです。ファイル操作、時間、そしてデータの永続化と、プログラムをより実用的にするための強力な武器が揃いました。次回からは、これらの武器を手に、さらに大きな冒険に出かけましょう!
次回予告 ⇒【Python標準ライブラリ編 #4】subprocessでPC操作を自動化!自分だけの便利ランチャーを作ろう
コメント