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中datetime模块中strftime/strptime函数的使用
Jul 03 Python
Python应用领域和就业形势分析总结
May 14 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
Python集合操作方法详解
Feb 09 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
如何编写python的daemon程序
Jan 07 Python
Python中对象的比较操作==和is区别详析
Feb 12 Python
tensorflow中的数据类型dtype用法说明
May 26 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 02 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 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提取中文首字母
2008/04/09 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
thinkPHP查询方式小结
2016/01/09 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
jQuery MD5加密实现代码
2010/03/15 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
Python正则表达式分组概念与用法详解
2017/06/24 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
如何更优雅地写python代码
2019/07/02 Python
基于python实现模拟数据结构模型
2020/06/12 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
python二维图制作的实例代码
2020/12/03 Python
Django权限控制的使用
2021/01/07 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
化学教师教学反思
2014/01/17 职场文书
就业意向书
2014/07/29 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书