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中str.format()详解
Mar 12 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 Python
Python numpy线性代数用法实例解析
Nov 15 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
Jan 06 Python
Python读取表格类型文件代码实例
Feb 17 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
Python使用tkinter实现小时钟效果
Feb 22 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读取和编写XML DOM的实现代码
2011/02/03 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
python数据处理实战(必看篇)
2017/06/11 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
flask-restful使用总结
2018/12/04 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python批量解压zip文件的方法
2019/08/20 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
python使用建议与技巧分享(二)
2020/08/17 Python
利用python 读写csv文件
2020/09/10 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
课前一分钟演讲稿
2014/08/26 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
失职检讨书大全
2015/01/26 职场文书
导游词之太原天龙山
2020/01/02 职场文书
Django如何与Ajax交互
2021/04/29 Python
python中对列表的删除和添加方法详解
2022/02/24 Python