python3_zipfile_创建压缩文件

   日期:2024-01-17     浏览:52    评论:0    

python3_zipfile_创建压缩文件

转载注明来源: 本文链接 来自osnosn的博客,写于 2020-05-08.

  • ZipFile的compression=缺省是 ZIP_STORED(仅存储不压缩)。
    所以要指定为ZIP_DEFLATED(zip算法),或ZIP_LZMA(lzma算法,压缩率高,就是慢了点)
    • compresslevel= 要py3.7以上才支持。
  • 写入文件,可以用write(),或writestr()
    • write(),就不需要自己设置文件修改时间了。

例子1,创建zip

import zipfile
import time

orgfilename='需要压缩的原始文件名'
fstat=os.stat(orgfilename) # 获取文件修改时间
bname=os.path.basename(orgfilename) #去掉路径
comment='This is a test comment.\n This is line 2.' #限制65535个字节

fzip=zipfile.ZipFile(orgfilename+'.zip','w',compression=zipfile.ZIP_DEFLATED) #py<=3.6
#fzip=zipfile.ZipFile(orgfilename+'.zip','w',compression=zipfile.ZIP_DEFLATED,compresslevel=6) #py>=3.7
fzip.comment=comment.encode('utf-8')  # bytes,写入zip本身的comment. 无论什么时候写入,都是存在zip文件的末尾。

with open(orgfilename,'rb') as fin:
    fzip.writestr('mydir/'+bname,fin.read()) # 把文件写入zip,zip中仅加了一层目录mydir
finfo=fzip.getinfo('mydir/'+bname) #获取这个文件的info
# 因为文件是通过writestr()写入的,所以文件修改时间需要手工设置
finfo.date_time=time.localtime(fstat.st_mtime)[0:6] # 文件修改时间
finfo.comment=comment.encode('utf-8') #bytes, 写入对应文件的comment.实际存在文件的末尾。
fzip.close() #zip文件创建完成

例子2,注释

import json

#zip文件的注释可以这么用
COMM={}
COMM['d1']=123
COMM['f1']=3.25
COMM['s1']='abcdefg'
comment=json.dumps(COMM,indent=2) #用indent好看点
...
fzip.comment=comment.encode('utf-8')  # bytes,写入zip本身的comment

例子3,读zip

import zipfile
from io import BytesIO
import json

zipname='zip的文件名'
fzip=zipfile.ZipFile(zipname,'r') #打开zip文件
comm=fzip.comment.decode('utf-8') # zip自身的注释,读取速度比较快
print('===> zip comment:')
print(comm)
zipdata=json.loads(comm) # 获取comment中的json数据
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()

转载注明来源: 本文链接 来自osnosn的博客.

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服