- ZipFile的
compression=缺省是 ZIP_STORED(仅存储不压缩)。
所以要指定为ZIP_DEFLATED(zip算法),或ZIP_LZMA(lzma算法,压缩率高,就是慢了点)
compresslevel= 要py3.7以上才支持。
- 写入文件,可以用
write(),或writestr()
- 用
write(),就不需要自己设置文件修改时间了。
例子1,创建zip,写注释,改文件的mtime
import os
import time
import zipfile
orgfilename='需要压缩的原始文件名'
fstat=os.stat(orgfilename)
bname=os.path.basename(orgfilename)
comment='This is a test comment.\n This is line 2.'
fzip=zipfile.ZipFile(orgfilename+'.zip','w',compression=zipfile.ZIP_DEFLATED)
fzip.comment=comment.encode('utf-8')
with open(orgfilename,'rb') as fin:
fzip.writestr('mydir/'+bname,fin.read())
finfo=fzip.getinfo('mydir/'+bname)
finfo.date_time=time.localtime(fstat.st_mtime)[0:6]
finfo.comment=comment.encode('utf-8')
fzip.close()
例子2,注释中写 json 格式
import json
COMM={}
COMM['d1']=123
COMM['f1']=3.25
COMM['s1']='abcdefg'
comment=json.dumps(COMM,indent=2)
...
fzip.comment=comment.encode('utf-8')
例子3,读zip,读注释,解压文件
import json
import zipfile
from io import BytesIO
zipname='zip的文件名'
fzip=zipfile.ZipFile(zipname,'r')
comm=fzip.comment.decode('utf-8')
print('===> zip comment:')
print(comm)
zipdata=json.loads(comm)
print('===> data from json:')
print(repr(zipdata))
names=fzip.namelist()
finfo=fzip.getinfo(names[0])
print('===> mtime of file:')
print('%02d-%02d-%02d %02d:%02d:%02d' % finfo.date_time)
print('===> comment of file:')
print(finfo.comment.decode('utf-8'))
fout=BytesIO(fzip.read(names[0]))
fzip.close()
...
fout.close()
文末福利
点击领取2020Python资料合集,视频&电子书
