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内置数据类型详解
Aug 18 Python
有趣的python小程序分享
Dec 05 Python
Python实现的双色球生成功能示例
Dec 18 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
python实战之实现excel读取、统计、写入的示例讲解
May 02 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
关于tf.reverse_sequence()简述
Jan 20 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 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随机数生成代码与使用实例分析
2011/04/08 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
php异常处理捕获错误整理
2019/09/23 PHP
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python实现截屏的函数
2015/07/25 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
如何运行带参数的python脚本
2019/11/15 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
详解HTML5中的标签
2015/06/19 HTML / CSS
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
铁路个人事迹材料
2014/01/30 职场文书
迎元旦广播稿
2014/02/22 职场文书
教师工作失职检讨书
2014/09/18 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
小学生安全保证书
2015/05/09 职场文书
个人工作决心书
2015/09/22 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python
python实现简单的聊天小程序
2021/07/07 Python
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
java executor包参数处理功能 
2022/02/15 Java/Android
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS