Pythonの辞書をファイルに保存・読み込む方法(pickle / json)初心者向け完全ガイド
生徒
「Pythonで作った辞書をファイルに保存して、あとでまた読み込みたいのですが、どうすればいいですか?」
先生
「Pythonではpickleとjsonという2つの方法が代表的です。それぞれ特徴がありますよ。」
生徒
「pickleとjsonって何が違うんですか?」
先生
「pickleはPython専用の保存形式で、jsonは人間が読めるテキスト形式です。それぞれの使い方を順番に説明しますね!」
1. pickleで辞書を保存・読み込む
pickleはPythonのオブジェクトをそのまま保存できるバイナリ形式の方法です。型の情報も保持されるので、数値やリストなどを含んだ辞書でも問題なく扱えます。
import pickle
data = {"名前": "田中", "年齢": 28, "趣味": ["読書", "旅行"]}
# 保存
with open("data.pkl", "wb") as f:
pickle.dump(data, f)
# 読み込み
with open("data.pkl", "rb") as f:
loaded_data = pickle.load(f)
print(loaded_data)
{'名前': '田中', '年齢': 28, '趣味': ['読書', '旅行']}
注意点として、pickleはPython専用の形式なので、他の言語とは互換性がありません。
2. jsonで辞書を保存・読み込む
jsonは「JavaScript Object Notation」の略で、テキスト形式のデータ保存方法です。人間が読める形式で、Python以外の言語ともデータ交換できます。
import json
data = {"名前": "佐藤", "年齢": 34, "趣味": ["音楽", "料理"]}
# 保存
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
# 読み込み
with open("data.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
print(loaded_data)
{'名前': '佐藤', '年齢': 34, '趣味': ['音楽', '料理']}
ensure_ascii=Falseを指定することで、日本語がそのまま保存されます。
3. pickleとjsonの違い
- pickle:Python専用、型情報を保持、バイナリ形式、人間には読みにくい
- json:テキスト形式、他の言語と互換性あり、人間にも読みやすい
用途によって使い分けることが重要です。例えば、Pythonだけで扱う一時的なデータはpickle、他システムとやり取りするデータはjsonが向いています。
4. 応用:複数の辞書を保存する
複数の辞書をまとめて保存する場合は、リストや辞書に格納してから保存します。
data_list = [
{"名前": "山田", "年齢": 25},
{"名前": "鈴木", "年齢": 30}
]
import json
with open("multi.json", "w", encoding="utf-8") as f:
json.dump(data_list, f, ensure_ascii=False, indent=4)
with open("multi.json", "r", encoding="utf-8") as f:
loaded_list = json.load(f)
print(loaded_list)
[{'名前': '山田', '年齢': 25}, {'名前': '鈴木', '年齢': 30}]
5. 実務での注意点
pickleはセキュリティ上、信頼できないファイルを読み込むと危険な場合があります。jsonは安全ですが、日付やPython特有のオブジェクトはそのままでは保存できません。
業務で使う場合は、データの性質と利用環境を考えて適切な方法を選びましょう。
まとめ
Python で辞書データを保存したり読み込んだりする作業は、プログラムを書いていくうえで非常に重要な基礎になります。特に辞書型は、ユーザー情報、設定データ、アプリの状態などをまとめて扱えるため、保存方法を理解しておくと実務でも学習でも大きく役立ちます。今回の記事では、Python の代表的な保存方法である pickle と json の2つを比較しながら、それぞれの特徴や使い方を丁寧に確認してきました。どちらも辞書の保存に使えますが、保存形式や使える場面が異なるため、目的に応じて正しく選ぶことがとても大切です。
まず、pickle は Python 専用のバイナリ形式であり、数値や文字列だけでなくリストや辞書を含む複雑なデータ構造をそのままの形で保存できる強力な仕組みです。型の情報も完全に保持されるため、そのまま保存してそのまま読み込めますが、その一方でPython 以外の言語とは互換性がないことが特徴です。実務や学習環境で長期間保存するデータや、別システムで読み取る可能性があるデータには向きません。しかし、Python 内だけですぐに保存してすぐ読み込むような場合には「一番手軽で元のまま扱える」という大きな利点があります。
一方で json はテキスト形式で人間にも読みやすく、他の言語とも互換性があるという点で非常に汎用性の高い保存方法です。特に Web API やフロントエンドとのやり取り、外部サービスへの送受信など、Python 以外の環境と連携する場面では json が標準的な形式となっています。また、ファイルがシンプルなテキストのため git などでの管理にも適しています。ただし json は Python の辞書とは完全に同じ構造を扱えるわけではなく、日付型や一部のオブジェクトなどはそのまま保存できないという制約もあります。今回の例でもensure_ascii=False を使うことで日本語を問題なく保存できることを確認しました。
辞書データを安全かつ確実に保存するには、「保存したいデータの性質」と「そのデータを使う環境」を正しく理解したうえで pickle と json を選び分けることが重要です。短期間の保存や Python 内で完結する処理なら pickle が便利であり、他の言語とやり取りしたり設定ファイルとして再利用するなら json が最適です。また、複数の辞書を扱う場合には、それらをリストにまとめて保存する方法が効率的で、読み込み後も扱いやすくなります。
さらに実務においては、pickle の読み込みが危険になるケースがあることも押さえておく必要があります。pickle ファイルは Python のオブジェクトを復元する際に任意コードが実行される可能性があるため、信頼できないファイルは絶対に読み込まないようにすることが大切です。一方で json は内容が可視化されているぶん、セキュリティリスクが低く、広い場面で利用されています。しかし json も万能ではなく、データの種類によっては追加加工が必要になることもあります。用途に合わせた柔軟なデータ管理が求められます。
ここまでの内容を踏まえ、辞書をファイルに保存する基本パターンをひとつのサンプルコードとしてまとめてみました。pickle と json のどちらも使えるようになると、データ管理の幅が一気に広がり、アプリケーション開発や学習の効率が大きく向上します。
import pickle
import json
# 共通で使う辞書データ
profile = {
"名前": "山本",
"年齢": 32,
"趣味": ["釣り", "料理"],
"有効": True
}
# pickleで保存
with open("profile.pkl", "wb") as f:
pickle.dump(profile, f)
# pickleで読み込み
with open("profile.pkl", "rb") as f:
loaded_pickle = pickle.load(f)
print("pickle読み込み:", loaded_pickle)
# jsonで保存
with open("profile.json", "w", encoding="utf-8") as f:
json.dump(profile, f, ensure_ascii=False, indent=4)
# jsonで読み込み
with open("profile.json", "r", encoding="utf-8") as f:
loaded_json = json.load(f)
print("json読み込み:", loaded_json)
このように、pickle と json はどちらも辞書を保存するための便利な選択肢ですが、用途や環境に応じて賢く使い分けることで Python のデータ管理がより快適になります。辞書はアプリの構造や設定を保持するための基本的なデータ型であるため、保存方法の理解はそのままスキルアップにつながります。特にデータの永続化や外部との連携を行うプログラムを書きたい場合には、pickle と json の特徴や安全性、扱い方をしっかり押さえておくことで、トラブルを避けながら堅実な開発ができるようになります。
また、実務の現場では、データの形式が増えたり、システム間でやり取りされる構造が複雑になったりすることも少なくありません。そうした場合にも、辞書の保存方法を理解していれば、適切なフォーマットを選んで安全かつ効率よく処理ができます。pickle と json は Python 初心者が最初に学ぶデータ保存技術として最適であり、理解しておくと後の学習がとてもスムーズになります。今回学んだ知識を活かしながら、実際のプログラムでもぜひ試してみてください。
生徒
「pickle と json の違いがよくわかりました。最初はどっちを使えばいいのか迷っていたのですが、今回の説明で用途がはっきりしました!」
先生
「それはよかったです。それぞれの特徴を理解しておけば、保存したいデータの内容や使う環境に応じて正しく選べるようになりますよ。」
生徒
「json が他の言語でも扱えるというのは、たしかにいろいろな場面で使えそうですね。Web アプリでデータをやり取りするときとか便利そうです。」
先生
「その通りです。逆に Python だけで閉じた処理なら pickle がとても楽ですよ。型の情報まで全部保存できるので、再現性が高いんです。」
生徒
「でも pickle は信頼できるデータじゃないと危険、という点も覚えておかないとですね。」
先生
「うん、その点は重要です。pickle は安全に扱える場面で使い、外部とのやり取りがある場合には json を中心に使うのが基本です。」
生徒
「複数の辞書をリストでまとめて保存する方法も役に立ちそうです。データベースみたいに扱えますね!」
先生
「そうですね。辞書やリストを組み合わせることで、多くの情報を柔軟に扱えるようになります。今回学んだことをいろんなコードで試してみてください。」