この記事では、Pythonのpprint
モジュールが提供するpformat()
関数を使い、リストや辞書といった変数の内容を人間が読める形式で.py
ファイルに保存し、後からそのファイルをモジュールとしてインポートしてデータを再利用するというテクニックについて解説します。
pprint.pformat()
とは
pprint.pformat()
関数は、Pythonのオブジェクト(リストや辞書など)を、整形された読みやすい文字列に変換して返します。
この関数が生成する文字列の重要な特徴は、それがそのままPythonのコードとして有効であるという点です。この特性を利用して、プログラムのデータをpy
ファイルとして保存することができます。
import pprint
# 保存したいデータ
user_profiles = [
{'id': 'A001', 'name': 'Taro', 'status': 'active'},
{'id': 'B002', 'name': 'Hanako', 'status': 'inactive'}
]
# pformat()でデータを整形された文字列に変換
formatted_data_string = pprint.pformat(user_profiles)
print(formatted_data_string)
実行結果:
[{'id': 'A001', 'name': 'Taro', 'status': 'active'},
{'id': 'B002', 'name': 'Hanako', 'status': 'inactive'}]
データを.py
ファイルとして書き出す
次に、この整形された文字列を、Pythonの変数定義として.py
ファイルに書き出します。ここでは、config_data.py
という名前のファイルを作成します。
import pprint
user_profiles = [
{'id': 'A001', 'name': 'Taro', 'status': 'active'},
{'id': 'B002', 'name': 'Hanako', 'status': 'inactive'}
]
# データを整形された文字列に変換
formatted_data_string = pprint.pformat(user_profiles)
# 'config_data.py'というファイルに書き出す
with open('config_data.py', 'w', encoding='utf-8') as f:
# "profiles = [ ... ]" という形式で書き込む
f.write(f"profiles = {formatted_data_string}\n")
print("config_data.py ファイルを作成しました。")
このスクリプトを実行すると、カレントディレクトリに以下の内容を持つconfig_data.py
ファイルが作成されます。
# config_data.py の内容
profiles = [{'id': 'A001', 'name': 'Taro', 'status': 'active'},
{'id': 'B002', 'name': 'Hanako', 'status': 'inactive'}]
.py
ファイルをインポートしてデータを読み込む
書き出した.py
ファイルは、通常のPythonモジュールとしてimport
文で読み込むことができます。これにより、ファイルに保存したデータを簡単にプログラムに復元できます。
# 作成したデータファイルをインポートする
import config_data
# インポートしたモジュールを通じてデータにアクセス
print(config_data.profiles)
print(config_data.profiles[0])
print(config_data.profiles[0]['name'])
実行結果:
[{'id': 'A001', 'name': 'Taro', 'status': 'active'}, {'id': 'B002', 'name': 'Hanako', 'status': 'inactive'}]
{'id': 'A001', 'name': 'Taro', 'status': 'active'}
Taro
この方法の利点と注意点
この手法の利点は、保存されたデータが人間にとって読みやすく、Pythonのテキストエディタで直接編集できることです。プログラムの簡単な設定ファイルや、初期データを保存するのに適しています。
一方で、この方法はセキュリティ上の注意が必要です。ファイルはPythonコードとして直接インポート(実行)されるため、信頼できないソースから得たデータファイルに対してこの方法を用いるべきではありません。悪意のあるコードがファイルに埋め込まれていた場合、それを実行してしまう危険性があります。安全性が要求されるデータの保存には、JSON
などのより厳格なデータ交換フォーマットを使用することが推奨されます。
まとめ
pprint.pformat()
は、Pythonのデータ構造を、そのままPythonコードとして通用する整形済み文字列に変換します。この文字列を.py
ファイルに書き出すことで、後からモジュールとしてインポートし、簡単にデータを復元することができます。これは、人間が読み書きできる設定ファイルを作成するためのシンプルで便利なテクニックです。