由于某些原因,我无法在ZipFile.open()返回的文件类型对象上使用cPickle.load。如果我在由ZipFile.open()返回的文件类型对象上调用read(),则可以使用cPickle.loads。
示例...
注意:我不只想压缩pickle文件,还有其他类型的文件。这只是一个例子。
示例...
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()
注意:我不只想压缩pickle文件,还有其他类型的文件。这只是一个例子。
import picklefork
吗? :P - FrustratedWithFormsDesignercPickle
是C编码的),而且.open
方法是在Python 2.6中引入的——那么,猜猜看呢?(如果OP使用的是2.7——仍然只是一个发布候选版——或者还很少见的Py3,我肯定会期望有提及或标签;-)。并不是为了捍卫发布不完整信息的一般想法,但是这个问题(带有简短、完整、独立的代码)远远超过了SO的平均水平,所以单独批评它似乎对我来说是相当不合适的——当然它可以更好(提及2.6.5或任何特定版本、操作系统使用、EOFError等),但只是些微的改进。 - Alex Martelli