Python中zipfile压缩包模块的使用


Posted in Python onMay 14, 2021

简介

ZIP 文件格式是一个常用的归档与压缩标准,zipfile 模块提供了创建、读取、写入、添加及列出 ZIP 文件的工具

此模块目前不能处理分卷 ZIP 文件,支持解密 ZIP 归档中的加密文件,但是目前不能创建一个加密的文件。解密非常慢,因为它是使用原生 Python 而不是 C 实现的

压缩文件

class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True):ZipFile 对象,compression指定压缩模式

ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None):写入压缩文件,filename为原文件名,arcname为存档文件名,compress_type指定压缩模式

 

压缩模式 含义
ZIP_STORED 不压缩,默认值
ZIP_DEFLATED 常用的 ZIP 压缩
ZIP_BZIP2 BZIP2 压缩
ZIP_LZMA LZMA 压缩
import random
import zipfile

with open('1.txt', mode='w') as f:
    for _ in range(1000):
        f.write(str(random.random()) + '\n')

with zipfile.ZipFile('1.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
    zf.write('1.txt')
    zf.write('1.txt', '2.txt', zipfile.ZIP_STORED)  # 原文件名1.txt,存为2.txt,不压缩

效果

Python中zipfile压缩包模块的使用

解压文件

ZipFile.namelist():返回按名称排序的文件列表

ZipFile.extract(member, path=None, pwd=None):解压文件到指定目录

import zipfile

with zipfile.ZipFile('1.zip') as zf:
    for filename in zf.namelist():
        zf.extract(filename, '.')

是否ZIP文件

调用 zipfile.is_zipfile(filename)

是一个有效的 ZIP 文件返回 True,否则返回 False,压根不存在返回 False

import zipfile

for filename in ['1.txt', '1.zip', '2.zip']:
    print(filename, zipfile.is_zipfile(filename))
    # 1.txt False
    # 1.zip True
    # 2.zip False

读取元数据

ZipFile.namelist():返回按名称排序的文件列表

ZipFile.infolist():返回ZipInfo对象 列表

ZipFile.getinfo(name):返回一个 ZipInfo对象

import zipfile

with zipfile.ZipFile('1.zip', 'r') as zf:
    print(zf.namelist())  # 文件列表

    for info in zf.infolist():
        print(info)
        print(info.filename)  # 文件名称
        print(info.date_time)  # 修改时间,可用datetime.datetime(*info.date_time)
        print(info.compress_type)  # 压缩类型,值为zipfile.ZIP_STORED、ZIP_DEFLATED、ZIP_BZIP2、ZIP_LZMA
        print(info.comment)  # 注释
        print(info.extra)  # 扩展字段数据
        print(info.create_system)  # 创建所用系统,0为Windows,3为Unix
        print(info.create_version)  # 创建所用PKZIP版本
        print(info.extract_version)  # 提取所用PKZIP版本
        print(info.flag_bits)  # 标志位
        print(info.volume)  # 文件头的分卷号
        print(info.compress_size)  # 已压缩的数据大小
        print(info.file_size)  # 未压缩的数据大小
        print()

从其他数据源压缩文件

ZipFile.writestr(zinfo_or_arcname, data, compress_type=None, compresslevel=None):将一个文件写入压缩文件

import random
import zipfile

data = ''.join([str(random.random()) + '\n' for i in range(1000)])

with zipfile.ZipFile('1.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
    zf.writestr('1.txt', data)

写入ZipInfo

class zipfile.ZipInfo(filename='NoName', date_time=(1980, 1, 1, 0, 0, 0)):压缩文件成员信息类

import time
import random
import zipfile

data = ''.join([str(random.random()) + '\n' for i in range(1000)])

with zipfile.ZipFile('1.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
    info = zipfile.ZipInfo('1.txt', date_time=time.localtime(time.time()))
    info.compress_type = zipfile.ZIP_DEFLATED
    info.comment = b'a comment'
    info.create_system = 0
    zf.writestr(info, data)

效果

Python中zipfile压缩包模块的使用

追加文件

ZipFilemode 改为追加模式 a

import random
import zipfile

with open('2.txt', mode='w') as f:
    for _ in range(1000):
        f.write(str(random.random()) + '\n')

with zipfile.ZipFile('1.zip', mode='a') as zf:
    zf.write('2.txt')

创建包含Python库的ZIP

class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=-1):用于创建包含 Python 库的 ZIP 类

zipfile_pyzipfile.py

import sys
import zipfile

with zipfile.PyZipFile('pyzipfile.zip', mode='w') as zf:
    zf.debug = 3
    zf.writepy('.')
for name in zf.namelist():
    print(name)

sys.path.insert(0, 'pyzipfile.zip')
import zipfile_pyzipfile

print('Imported from:', zipfile_pyzipfile.__file__)

参考文献

zipfile — Python文档

zipfile — PyMOTW 3

到此这篇关于Python中zipfile压缩包模块的使用的文章就介绍到这了,更多相关Python zipfile内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用Python生成器实现微线程编程的教程
Apr 13 Python
Python中的变量和作用域详解
Jul 13 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
django认证系统 Authentication使用详解
Jul 22 Python
pycharm显示远程图片的实现
Nov 04 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
python unichr函数知识点总结
Dec 16 Python
Django2.1.7 查询数据返回json格式的实现
Dec 29 Python
python批量更改目录名/文件名的方法
Apr 18 Python
python3中apply函数和lambda函数的使用详解
Feb 28 Python
python 制作一个gui界面的翻译工具
pyqt5打包成exe可执行文件的方法
Python 机器学习工具包SKlearn的安装与使用
python process模块的使用简介
May 14 #Python
django学习之ajax post传参的2种格式实例
May 14 #Python
Python djanjo之csrf防跨站攻击实验过程
python控制台打印log输出重复的解决方法
You might like
各种咖啡的英文名子是什么
2021/03/03 新手入门
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
原生js实现放大镜
2017/02/20 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
Python自动登录126邮箱的方法
2015/07/10 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
团员个人的自我评价
2013/12/02 职场文书
中文教师求职信
2014/02/22 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
村党支部公开承诺书
2014/05/29 职场文书
会计学自荐信
2014/06/03 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
2015年技术员工作总结
2015/04/10 职场文书
工资证明格式模板
2015/06/12 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python
html form表单基础入门案例讲解
2021/07/15 HTML / CSS