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字典排序实例详解
May 20 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
django表单的Widgets使用详解
Jul 22 Python
python opencv实现证件照换底功能
Aug 19 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
如何在python中写hive脚本
Nov 08 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 Python
Django使用echarts进行可视化展示的实践
Jun 10 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通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
header导出Excel应用示例
2014/01/24 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
html数组字符串拼接的最快方法
2009/09/16 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
python使用Tkinter显示网络图片的方法
2015/04/24 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
python执行精确的小数计算方法
2019/01/21 Python
python找出因数与质因数的方法
2019/07/25 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
Python中logging日志库实例详解
2020/02/19 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
车间调度岗位职责
2013/11/30 职场文书
社区工作者感言
2014/03/02 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
先进党支部申报材料
2014/12/24 职场文书
刘公岛导游词
2015/02/05 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
职工食堂管理制度
2015/08/06 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL