Python处理zip压缩文件

news2024/11/27 23:34:46

文章目录

    • ZipFile对象
      • 写入压缩文件
      • 读取和解压缩
      • 常用属性
    • ZipInfo

ZipFile对象

顾名思义,zipfile是处理zip文件的模块,其中最重要的类是ZipFile,其构造函数为

ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True)

各参数含义如下

  • file 文件路径或者文件对象
  • mode 文件打开模式,可以为r, w, a, x,表示读、写、追加、新建写入。
  • compression 压缩方案,可以是ZIP_STORED, ZIP_DEFLATED, ZIP_BZIP2ZIP_LZMA
  • allowZip64True时,若文件大于4GiB,zipfile将创建使用ZIP64扩展的ZIP文件;为False则引发异常。
  • compresslevel 为压缩等级,在ZIP_DEFLATED时可选整数0-9,在ZIP_BZIP2时可选整数1-9,其他压缩方案不可用。
  • strict_timestamps 设为False时允许压缩早于1980年以前活2108年之后的文件,但时间戳会设为1980-01-01或2107-12-31

写入压缩文件

下面对读写zip数据做一个简单的示例

import zipfile, os
test = "if you miss the train i'm on" * 500
with zipfile.ZipFile('test.zip', 'w') as z:
    z.writestr("test.txt", test)

效果如下

在这里插入图片描述

其中,z.writestr("test.txt", test)表示将test写入test.txt后,在存档到压缩文件z中。

读取和解压缩

能写就能读,下面来演示一下Zipfile.read的功能

z = zipfile.ZipFile('test.zip', 'r')
z.namelist()        # 读取压缩文件中的文件列表
# ['test.txt']
z.read('test.txt')  # 读取`test.txt`中的内容
# if you miss the train i'm onif you miss the train...

通过printdir可以查看压缩文件中更加详细的文件信息。

>>> z.printdir()
File Name     Modified                  Size
test.txt      2023-01-19 12:32:12       14000

一般来说,通过代码来读写压缩文件是程序员的事儿,程序员要做的往往是给用户提供一个按钮,按下这个按钮可以实现压缩和解压缩。在ZipFile中,extractextract可以便捷地将压缩包里面的文件解压到指定位置,下面代码将z中所有的文件解压到test文件夹中,如果test文件夹不存在,则创建。

z.extractall('test')

常用属性

ZipFile封装的属性和没有参数的常用方法如下

  • filename ZIP 文件的名称
  • debug 要使用的调试输出等级,可设0(默认无输出)到3(最多输出)
  • comment 关联到ZIP文件的字节对象形式的说明
  • close() 关闭归档文件,在退出程序之前必须调用,否则数据不会被写入。
  • namelist() 返回按名称排序的归档成员列表
  • infolist() 返回每个归档成员的 ZipInfo 对象
  • printdir() 打印归档的目录表
  • testzip() 读取归档中的所有文件并检查它们的 CRC 和文件头。 返回第一个已损坏文件的名称,在其他情况下则返回 None。

ZipInfo

通过ZipFile.getinfo(name)返回的是一个ZipInfo对象,如果name为空,则返回压缩包中所有文件的信息列表。ZipInfo对象支持如下属性:

属性说明属性说明
filename文件名称compress_type压缩类型
date_time文件最后修改时间
comment文档说明extr扩展项数据
create_system创建该zip的系统
create_version创建时的PKZIP版本extract_version解压所需PKZIP版本
reserved预留字段,返回0
flag_bitszip标志位CRC未压缩文件的CRC-32
volume文件头的卷标header_offset文件头偏移位。
internal_attr内部属性external_attr外部属性
compress_size压缩后大小file_size未压缩时大小

其中date_time的返回值是一个6元组,内容为:年月日时分秒,例如

>>> info = z.infolist()[0]
>>> info.date_time
(2023, 1, 19, 12, 32, 12)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用VGG网络训练发生错误RuntimeError: CUDA out of memory解决方案:

问题在使用VGG网络训练Mnisist数据集时,发生错误RuntimeError: CUDA out of memory. Tried to allocate 392.00 MiB (GPU 0; 2.00 GiB total capacity; 1.45 GiB already allocated; 0 bytes free; 1.47 GiB reserved in total by PyTorch) If reserved memory is &…

发布详解 | Flutter 3.7 稳定版发布

新年伊始,由 Flutter 3.7 正式版来「打头阵」!我们与整个 Flutter 社区成员们继续在 Flutter 3.7 中优化了框架,包括创建自定义菜单栏和层叠式菜单、更好的国际化工具支持、新的调试工具以及其他功能和特性等。新的稳定版里,我们在…

JUC面试(十二)——AQS

AQS juc.locks包下 AbstractQueuedSynchronizer,抽象的队列同步器 aqs是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石, 通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态&#x…

极限运算法则——“高等数学”

各位CSDN的uu们你们好啊,今天,小雅兰学习的内容是极限运算法则 回顾 无穷小的极限运算法则 定理1:两个无穷小的和是无穷小 定理2:有界函数与无穷小的乘积是无穷小 极限的四则运算法则 定理3 定理4 定理5:极限的保序性…

实现自己的数据库二

一 前言上次数据库支持了一个测试表的插入和查询,但是数据全部保存到磁盘中的,如果程序重启后,数据都会全部丢了,所以需要持久化到磁盘上,像sqlite一样,简单的将数据库的数据保存到一个磁盘文件上。二 实现…

【BBuf的CUDA笔记】六,总结 FasterTransformer Encoder(BERT) 的cuda相关优化技巧

这里总结 FasterTransformer Encoder(BERT) 的cuda相关优化技巧 解读:https://github.com/NVIDIA/FasterTransformer/blob/main/docs/bert_guide.md ,优化点解读之前是翻译了下 Faster Transformer BERT 的文档,然后省略了运行样例等环节&…

【Datewhale一起吃瓜 Task4】啃瓜第五章

支持向量机 任务:找到超平面 在样本空间中,找到最好的超平面把样本分开,即找到正中间的超平面 满足 该超平面 分开了两类该超平面 最大化支持向量间隔该超平面处于 间隔中间,到所有支持向量距离相等 如何找:表示出…

从聚水潭到金蝶云星空通过接口集成数据

从聚水潭到金蝶云星空通过接口集成数据数据源系统:聚水潭聚水潭成立于2014年,创始人兼CEO骆海东拥有近三十年传统及电商ERP的研发和实施部署经验。聚水潭创建之初,以电商SaaSERP切入市场,凭借出色的产品和服务,快速获得市场的肯定…

【论文简述】Attention-Aware Multi-View Stereo(CVPR 2020)

一、论文简述 1. 第一作者:Keyang Luo 2. 发表年份:2020 3. 发表期刊:CVPR 4. 关键词:MVS、代价体、注意力机制、正则化 5. 探索动机: However, the feature matching results from different channels are usual…

仿写Dubbo-MyRpc

基础 在仿写Dubbo之前,需要了解一些技术,像Java反射,Java代理,Java Socket以及Dubbo相关概念。 项目结构 项目gitee地址:https://gitee.com/AGi_R/framework my-common 整个项目的公共资源库。存放一些公共的注解&…

拦截器、过滤器、监听器

目录一、拦截器1. 拦截器是什么?2. 设置拦截器a. 定义拦截器b. 配置加载拦截器c. 新建页面二、过滤器1. 使用原因2. Filter概念图3. Filter编程三、监听器一、拦截器 拦截器:必须保证页面有访问controller的操作,否则拦截不了 1. 拦截器是什么? 概念…

OpenWrt软路由空间扩容

文章目录预备知识OpenWrt系统固件分类EXT4固件扩容方式新建分区扩容操作步骤直接扩容操作步骤SQUASHFS固件扩容方式新建分区扩容直接扩容EFI引导固件的额外操作参考预备知识 OpenWrt系统固件分类 EXT4固件 固件包名称中包含有ext4关键字,可以参考固件分类关键字示意…

设计模式 - 创建型模式_建造者模式

文章目录创建型模式概述Case模拟工程Bad ImplBetter Impl (建造者模式重构代码)小结创建型模式 创建型模式提供创建对象的机制, 能够提升已有代码的灵活性和可复⽤性。 类型实现要点工厂方法定义⼀个创建对象的接⼝,让其⼦类⾃⼰…

编写用户注册用表单

<!-- 需求&#xff1a; 用户注册&#xff1a;用户名、密码、确认密码、性别、兴趣爱好、学历、简介 --> <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>编写用户注册用表单<…

【Linux】Linux和Window下\r与\n的区别、git命令行的使用

作者&#xff1a;小卢 专栏&#xff1a;《Linux》、《Git》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 1. 回车换行符在Window下和在Linux下的区别&#xff1a; 1.1回车换行符&#xff1a;…

用友U8和旺店通企业版淘宝奇门单据接口集成

用友U8和旺店通企业奇门单据接口集成对接系统&#xff1a;旺店通企业奇门慧策最先以旺店通ERP切入商家核心管理痛点——订单管理&#xff0c;之后围绕电商经营管理中的核心管理诉求&#xff0c;先后布局流量获取、会员管理、仓库管理等其他重要经营模块。慧策的产品线从旺店通E…

实现宏offsetof()

本期介绍&#x1f356; 主要介绍&#xff1a;什么是offsetof()&#xff0c;offsetof()的用法&#xff0c;如何自己实现这个宏&#x1f440;。 offsetof其实是一个宏&#xff0c;作用是&#xff1a;能够求出指定成员相对于结构体起始地址的偏移量&#xff08;单位&#xff1a;字…

(考研湖科大教书匠计算机网络)第三章数据链路层-第一节:数据链路层概述

文章目录一&#xff1a;数据链路层概述&#xff08;1&#xff09;为什么要有数据链路层&#xff08;2&#xff09;数据链路层定义&#xff08;3&#xff09;点对点信道和广播信道二&#xff1a;数据链路层需要解决的一些问题&#xff08;1&#xff09;三个最基本问题①&#xf…

深入理解Promise之一步步教你手写Promise构造函数

目录前言一&#xff0c;手写教学1.1 基本结构1.2 resolve与reject结构搭建1.3 resolve与reject代码实现1.4 throw抛出异常改变状态1.5 promise对象状态只能转换一次1.6 then方法进行回调1.7 异步任务的回调执行1.8 执行多个回调的实现1.9 同步修改状态then方法结果返回1.10 异步…

【手写 Promise 源码】第四篇 - 翻译并理解 Promise A+ 规范

一&#xff0c;前言 上一篇&#xff0c;根据对 Promise 的分析和了解&#xff0c;实现了一个简版 Promise&#xff0c;主要涉及以下内容&#xff1a; Promise 的实现思路&#xff1b;Promise A 规范&#xff08;简版&#xff09;&#xff1b;Promise 简版实现和功能测试&…