Pythonのドキュメントが提供する情報を調べましたが、まだ少し混乱しています。誰かが新しいファイルを作成し、pickleを使用して辞書をそのファイルにダンプするサンプルコードを投稿できますか?
11 に答える
これを試して:
import pickle
a = {'hello': 'world'}
with open('filename.pickle', 'wb') as handle:
pickle.dump(a, handle, protocol=pickle.HIGHEST_PROTOCOL)
with open('filename.pickle', 'rb') as handle:
b = pickle.load(handle)
print(a == b)
dict
オブジェクトに固有の上記のソリューションについては何もありません。これと同じアプローチは、任意のクラスのインスタンスや任意の複雑なデータ構造のネストなど、多くの Python オブジェクトで機能します。たとえば、2 行目を次の行に置き換えます。
import datetime
today = datetime.datetime.now()
a = [{'hello': 'world'}, 1, 2.3333, 4, True, "x",
("y", [[["z"], "y"], "x"]), {'today', today}]
の結果True
も出ます。
一部のオブジェクトは、その性質上、漬けることができません。たとえば、開いているファイルへのハンドルを含む構造体をピクルしても意味がありません。
import pickle
your_data = {'foo': 'bar'}
# Store data (serialize)
with open('filename.pickle', 'wb') as handle:
pickle.dump(your_data, handle, protocol=pickle.HIGHEST_PROTOCOL)
# Load data (deserialize)
with open('filename.pickle', 'rb') as handle:
unserialized_data = pickle.load(handle)
print(your_data == unserialized_data)
の利点HIGHEST_PROTOCOL
は、ファイルが小さくなることです。これにより、解凍がはるかに速くなることがあります。
重要なお知らせ: pickle の最大ファイルサイズは約 2GB です。
別の方法
import mpu
your_data = {'foo': 'bar'}
mpu.io.write('filename.pickle', data)
unserialized_data = mpu.io.read('filename.pickle')
代替フォーマット
- CSV: 超シンプルな形式 (読み取りと書き込み)
- JSON: 人間が読めるデータを書くのに適しています。非常に一般的に使用されます (読み取りと書き込み)
- YAML: YAML は JSON のスーパーセットですが、読みやすい (読み書き、JSON と YAML の比較)
- pickle: Python シリアライゼーション形式 ( read & write )
- MessagePack ( Python パッケージ): よりコンパクトな表現 ( read & write )
- HDF5 ( Python パッケージ): 行列に最適 (読み取りと書き込み)
- XML: あまりにも存在します *ため息* (読み取りと書き込み)
アプリケーションでは、次のことが重要になる場合があります。
- 他のプログラミング言語によるサポート
- 読み書き性能
- コンパクトさ(ファイルサイズ)
構成ファイルを作成する方法を探している場合は、私の短い記事Configuration files in Pythonをお読みください。
>>> import pickle
>>> with open("/tmp/picklefile", "wb") as f:
... pickle.dump({}, f)
...
通常、cPickle 実装を使用することをお勧めします
>>> import cPickle as pickle
>>> help(pickle.dump)
Help on built-in function dump in module cPickle:
dump(...)
dump(obj, file, protocol=0) -- Write an object in pickle format to the given file.
See the Pickler docstring for the meaning of optional argument proto.
import pickle
dictobj = {'Jack' : 123, 'John' : 456}
filename = "/foldername/filestore"
fileobj = open(filename, 'wb')
pickle.dump(dictobj, fileobj)
fileobj.close()
ファイルを開かずに 1 行で書き込みまたは読み取りを処理する場合:
import joblib
my_dict = {'hello': 'world'}
joblib.dump(my_dict, "my_dict.pickle") # write pickle file
my_dict_loaded = joblib.load("my_dict.pickle") # read pickle file
私は酸洗いが混乱していることに気付きました (おそらく私が太っているためです)。ただし、これが機能することがわかりました。
myDictionaryString=str(myDictionary)
その後、テキストファイルに書き込むことができます。整数を .dat ファイルに書き込むようにというエラーが表示されたため、pickle の使用をあきらめました。ピクルスを使わないでごめんなさい。