ある.pyファイルにおいて、リストを作成した。そして、そのリストをその他の別の.pyファイルでも使用したい。こんな経験ありませんか?(僕は、クローリング・スクレイピングをしていてこのような状況を経験しました)
そんな時どうするか,,,,
➡pickleを使え!!!
pickleとは
Python でデータを保存したり読み込んだりするためのライブラリです。
簡単に言うと、「Python のデータ(リストや辞書、モデルなど)をファイルに保存して、後でまた使えるようにする」 ためのもの。
事前準備
import pickle
pickleファイルを保存
今、book_titles_listにいくつかの本名が格納されているとしましょう。
book_titles_list = ['嫌われる勇気', `限りある時間の使い方', `現代統計数理学の基礎']
そして、以下のコードを実行すると、book_titles_listが拡張子.pickleで自分のディレクトリ内に保存されます。
# リストをファイルに保存
with open('book_0titles_list.pkl', 'wb') as f:
pickle.dump(book_titles_list, f)
そして、実際カレントディレクトリに↓

しっかりと保存されていることがわかると思います。
pickleファイルの読み込み
さて、読み込みです。↓でsample2.pyでもbookd_titeles_listを再利用できます!
# 保存されたリストを読み込む
with open('book_titles_list.pkl', 'rb') as f:
book_titles_list = pickle.load(f)
※追記 with open()の構文について
with open(filename, mode) は、任意のファイルを開き、作業が終わったら自動的にファイルを閉じる仕組みを提供します。
modeの種類は、↓
| mode | 説明 |
|---|---|
| 'r' | 読み取り専用。ファイルが存在しない場合はエラー。 |
| 'w' | 書き込み専用。ファイルが存在しない場合は作成、存在する場合は上書き。 |
| 'a' | 追記モード。既存ファイルの末尾にデータを書き込む。 |
- 例1(mode='r')
with open('example1.txt', 'r') as f:
content = f.read()
print(content) # ファイルの内容を文字列として出力
ちなみに、バイナリデータ(.txt以外のファイル)を読み込むときは'b'をつけ足して'rb', 'wb'などとしましょう。
- 例2(mode='wb')
data = b'Hello, binary world!' # バイト列データ
with open('example2.bin', 'wb') as f:
f.write(data)