複数のPythonファイル間で共通データを共有する方法【pickleを使った実装例】
複数のPythonファイル間で共通データを共有するには?
複数のPythonスクリプト(プロセス)間で共通のデータを直接共有することはできません。それぞれのインタープリターは独立したメモリ空間を持っているため、データを受け渡すには必ず何らかの外部媒体を介す必要があります。
主な選択肢は以下の2つです。
- ネットワークやソケット通信を利用する
- 一時ファイル(共有ファイル)を利用する
最も手軽なのは、ファイルを介してデータを共有する方法です。Pythonの標準ライブラリであるpickleモジュールを使えば、一方のスクリプトでオブジェクトをファイルに保存(シリアライズ)し、もう一方のスクリプトでそのファイルを読み込んで元のオブジェクトとして復元(デシリアライズ)できます。
データを書き込む側(producer.py)
import pickle
shared = {"Foo": "Bar", "Parrot": "Dead"}
with open("shared.pkl", "wb") as fp:
pickle.dump(shared, fp)
データを読み込む側(consumer.py)
import pickle
with open("shared.pkl", "rb") as fp:
shared = pickle.load(fp)
print(shared["Foo"]) # 「Bar」と出力される
ポイント解説
- pickle.dump() でオブジェクトをファイルに保存し、pickle.load() で復元します。
- Python 3では、バイナリモード("wb" / "rb")でファイルを開く必要があります。
- with文を使用することで、ファイルのクローズ漏れを防げます。
- 辞書だけでなく、リストやタプル、クラスのインスタンスなど、ほとんどのPythonオブジェクトをそのまま保存・復元できます。
注意点と応用
pickleを使ったファイル共有はシンプルながら強力な手法ですが、信頼できないソースから作成されたpickleファイルを読み込むとセキュリティリスクが生じるため、自分自身が作成したファイルに限定して使用することが重要です。
また、より高度なプロセス間連携が必要な場合は、以下のような方法も検討するとよいでしょう。
- multiprocessingモジュール:プロセス間で安全にデータをやり取りできるQueueやPipeを提供
- JSON形式のファイル:人間が読みやすいテキスト形式でデータを共有したい場合に有効
- SQLiteなどのデータベース:大量のデータや頻繁な読み書きに適しています
用途やデータ量に応じて最適な手法を選択することで、複数のPythonスクリプト間でも効率的にデータを共有できます。
-
複数のExcelファイルのデータをまとめる方法|シートの移動・コピーと統合機能の使い方
Microsoft Excelで作業をしていると、データが複数のシートやピボットテーブルに分散してしまい、全体像が把握しにくくなることがあります。特にチームで作業している場合、複数のワークシートやExcelファイルに分かれたまま管理するのは非効率です。 データを整理して使いやすくするには、Excelのデータを統合(マージ)するのがおすすめです。別々のファイルからワークシートを移動・コピーしたり、複数のExcelファイルを1つにまとめたり、あるいは「統合」機能を使ってデータを結合したりと、目的に応じた方法を選べます。 この記事では、これらの方法を使ってExcelファイルやデータをまとめる手順
-
PythonでPDFファイルをExcelファイルに変換する方法を解説
Pythonには、さまざまな処理に対応できる豊富なライブラリが用意されています。本記事では、その中でもPDFファイルをExcelファイルに変換する方法について詳しく解説します。PythonでPDFをCSV形式に変換できるパッケージは複数存在しますが、ここではTabula-pyモジュールを使用します。Tabula-pyの主要部分はJavaで書かれており、PDFドキュメントを読み込み、PythonのDataFrameとして取得したり、JSONオブジェクトに変換したりすることができます。事前準備:JavaのインストールTabula-pyを使用する前に、システムにJavaが事前にインストールされている