546

Pythonのドキュメントが提供する情報を調べましたが、まだ少し混乱しています。誰かが新しいファイルを作成し、pickleを使用して辞書をそのファイルにダンプするサンプルコードを投稿できますか?

4

11 に答える 11

1065

これを試して:

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も出ます。

一部のオブジェクトは、その性質上、漬けることができません。たとえば、開いているファイルへのハンドルを含む構造体をピクルしても意味がありません。

于 2012-06-27T02:16:11.663 に答える
144
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')

代替フォーマット

アプリケーションでは、次のことが重要になる場合があります。

  • 他のプログラミング言語によるサポート
  • 読み書き性能
  • コンパクトさ(ファイルサイズ)

参照:データシリアライゼーション形式の比較

構成ファイルを作成する方法を探している場合は、私の短い記事Configuration files in Pythonをお読みください。

于 2015-10-20T19:49:21.840 に答える
11
>>> 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.
于 2012-06-27T02:16:23.533 に答える
2
import pickle

dictobj = {'Jack' : 123, 'John' : 456}

filename = "/foldername/filestore"

fileobj = open(filename, 'wb')

pickle.dump(dictobj, fileobj)

fileobj.close()
于 2013-12-05T12:40:49.223 に答える
-2

ファイルを開かずに 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
于 2021-08-04T14:38:09.470 に答える
-11

私は酸洗いが混乱していることに気付きました (おそらく私が太っているためです)。ただし、これが機能することがわかりました。

myDictionaryString=str(myDictionary)

その後、テキストファイルに書き込むことができます。整数を .dat ファイルに書き込むようにというエラーが表示されたため、pickle の使用をあきらめました。ピクルスを使わないでごめんなさい。

于 2014-06-17T14:03:30.347 に答える