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调用shell的方法
Nov 20 Python
python 实现红包随机生成算法的简单实例
Jan 04 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
利用python将图片版PDF转文字版PDF
May 03 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
Python+logging输出到屏幕将log日志写入文件
Nov 11 Python
python海龟绘图之画国旗实例代码
Nov 11 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缩略图生成程式(需要GD库支持)
2007/03/06 PHP
如何利用PHP执行.SQL文件
2013/07/05 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
京东国际站:JOYBUY
2017/11/23 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
《和我们一样享受春天》教学反思
2014/02/07 职场文书
宣传标语大全
2014/07/01 职场文书
委托书格式
2014/08/01 职场文书
儿园租房协议书范本
2014/12/02 职场文书
颐和园导游词
2015/01/30 职场文书
十月围城观后感
2015/06/08 职场文书
毕业酒会致辞
2015/07/29 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python