2017-02-10 7 views
0

을 사용 zipfile을 보관하는 방법 :<code>data</code> 사전을 보관하는 이진 데이터

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() 

접근 방식은 로컬 드라이브에 두 개의 파일 결과 하나는 피클이고 다른 하나는 우편 번호입니다.

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

어떻게 프로세스를 단순화하기 위해 : 는 data zip 파일이 유엔 - 보관 할 필요가 절인하려면?

+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 몇 가지 빠른 인터넷 검색 기능이 필요할 것입니다 :'preserved = pickle.dumps (data)'덤프는 문자열을 생성합니다. zipfile에는 문자열을 zip으로 변환하는 .writestr()이 있습니다. 이 방법은 오직 하나의 파일입니다. – 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))