2017-02-10 90 views
0

使用zipfile存档data词典:如何归档二进制数据

import os, sys, cPickle, zipfile 
data = {1: 'one'} 
pfile = r'c:\temp\myPickle.p' 
cPickle.dump(data, open(pfile, "wb")) 

zfilename = r'c:\temp\myArchive.zip' 
zfile = zipfile.ZipFile(zfilename, "w", zipfile.ZIP_DEFLATED) 
zfile.write(pfile, os.path.basename(pfile)) 
zfile.close() 

这种方法会导致两个文件的本地驱动器上:一个是泡菜,另一个是拉链。 若要腌data zip文件需要予以取消封存:

fh = open(zfilename, 'rb') 
z = zipfile.ZipFile(fh) 
for each in z.namelist(): 
    z.extract(each, r'c:\temp') 
fh.close() 

如何简化流程?

+0

[ZipFile.open](https://docs.python.org/3/library/zipfile.html#zipfile.ZipFile.open),[ZipFile.read](HTTPS://docs.python .org/3/library/zipfile.html#zipfile.ZipFile.read),[ZipFile.writestr](https://docs.python.org/3/library/zipfile.html#zipfile.ZipFile.writestr) – spectras

+1

from一些快速的谷歌搜索,我发现你可能需要的功能:'保存= pickle.dumps(数据)'转储产生一个字符串。 zipfile具有.writestr()将字符串转换为zip。这种方式只有一个文件。 – Nullman

回答

1

改为使用gzip。它会在您编写文件时压缩文件,因此不需要中间文件。

import cPickle as pickle 
import gzip 

data = {1: 'one'} 

pfile = r'test.pkl.gz' 
pickle.dump(data, gzip.open(pfile, "w"), pickle.HIGHEST_PROTOCOL) 
print pickle.load(gzip.open(pfile))