由于某种原因,我无法让 cPickle.load 处理 ZipFile.open() 返回的文件类型对象。如果我在 ZipFile.open() 返回的文件类型对象上调用 read(),我可以使用 cPickle.loads。
例子 ....
import zipfile
import cPickle
# the data we want to store
some_data = {1: 'one', 2: 'two', 3: 'three'}
#
# create a zipped pickle file
#
zf = zipfile.ZipFile('zipped_pickle.zip', 'w', zipfile.ZIP_DEFLATED)
zf.writestr('data.pkl', cPickle.dumps(some_data))
zf.close()
#
# cPickle.loads works
#
zf = zipfile.ZipFile('zipped_pickle.zip', 'r')
sd1 = cPickle.loads(zf.open('data.pkl').read())
zf.close()
#
# cPickle.load doesn't work
#
zf = zipfile.ZipFile('zipped_pickle.zip', 'r')
sd2 = cPickle.load(zf.open('data.pkl'))
zf.close()
注意:我不想只压缩泡菜文件,而是压缩许多其他类型的文件。这只是一个例子。