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的Django中django-userena组件的简单使用教程
May 30 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
python实现将excel文件转化成CSV格式
Mar 22 Python
Python合并多个Excel数据的方法
Jul 16 Python
Django组件之cookie与session的使用方法
Jan 10 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
python Django 创建应用过程图示详解
Jul 29 Python
python中的&&及||的实现示例
Aug 07 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
pytorch中的weight-initilzation用法
Jun 24 Python
如何基于matlab相机标定导出xml文件
Nov 02 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
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
微信小程序合法域名配置方法
2019/05/06 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
python k-近邻算法实例分享
2014/06/11 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
python中字符串变二维数组的实例讲解
2018/04/03 Python
django的登录注册系统的示例代码
2018/05/14 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
C语言开发工程师测试题
2016/12/20 面试题
新员工欢迎词
2014/01/12 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
小学课外活动总结
2014/07/09 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
初中团委工作总结
2015/08/13 职场文书
php字符串倒叙
2021/04/01 PHP
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server