Pythonのpprint.pformat()で変数を.pyファイルに保存・再利用する方法

この記事では、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ファイルに書き出すことで、後からモジュールとしてインポートし、簡単にデータを復元することができます。これは、人間が読み書きできる設定ファイルを作成するためのシンプルで便利なテクニックです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次