一、zipfile模块的简述

zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的,

在这里对zipfile的使用方法做一些记录。即方便自己也方便别人。

zipfile里有两个非常常用的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了。

ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的。

下面我们就来介绍这两个类的基本操作:

二、ZipFile和Zipinfo这两个类的基本操作

1、class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])

创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,

默认值为'r',表示读已经存在的zip文件,也可以为'w'或'a','w'表示新建一个zip文档或覆盖一个已经存在的zip文档,

import zipfile

f = zipfile.ZipFile(filename, 'r') # 这里的第二个参数用r表示是读取zip文件,w或a是创建一个zip文件

for f_name in f.namelist(): #z.namelist() 会返回压缩包内所有文件名的列表。

print(f_name)

#上面的代码是读取一个zip压缩包里所有文件的名字。

'a'表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。

ZipFile还提供了如下常用的方法和属性:

ZipFile.getinfo(name)

获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。

ZipFile.infolist()

获取zip文档内所有文件的信息,返回一个zipfile.ZipInfo的列表。

ZipFile.namelist()

获取zip文档内所有文件的名称列表。

ZipFile.extract(member[, path[, pwd]])

将zip文档内的指定文件解压到当前目录。参数member指定要解压的文件名称或对应的ZipInfo对象;参数path指定了解析文件保存的文件夹;

参数pwd为解压密码。下面一个例子将保存在程序根目录下的duoduo.zip内的所有文件解压到D:/Work目录:

import zipfile, os

f = zipfile.ZipFile(os.path.join(os.getcwd(), 'duoduo.zip')) #拼接成一个路径

for file in f.namelist():

f.extract(file, r'd:/Work') #在d:/Work中解压文件

f.close()

上面是os.getcwd的用法!!

ZipFile.extractall([path[, members[, pwd]]])

解压zip文档中的所有文件到当前目录。参数members的默认值为zip文档内的所有文件名称列表,也可以自己设置,选择要解压的文件名称。

ZipFile.printdir()

将zip文档内的信息打印到控制台上。

ZipFile.setpassword(pwd)

设置zip文档的密码。

ZipFile.read(name[, pwd])

获取zip文档内指定文件的二进制数据。下面的例子演示了read()的使用,zip文档内包括一个duoduo.txt的文本文件,使用read()方法读取其二进制数据,然后保存到D:/duoduo.txt。

import zipfile, os

zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'duoduo.zip'))

data = zipFile.read('duoduo.txt')

# (lambda f, d: (f.write(d), f.close()))(open(r'd:/duoduo.txt', 'wb'), data) #一行语句就完成了写文件操作。仔细琢磨哦~_~

with open(r'd:/duoduo.txt','wb') as f:

for d in data:

f.write(d)

zipFile.close()

ZipFile.write(filename[, arcname[, compress_type]])

将指定文件添加到zip文档中。filename为文件路径,arcname为添加到zip文档之后保存的名称, 参数compress_type表示压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。下面的例子演示了如何创建一个zip文档,并将文件D:/test.doc添加到压缩文档中。

import zipfile, os

zipFile = zipfile.ZipFile(r'D:/test.zip'), 'w')

zipFile.write(r'D:/test.doc', '保存的名字', zipfile.ZIP_DEFLATED)

zipFile.close()

ZipFile.writestr(zinfo_or_arcname, bytes)

writestr()支持将二进制数据直接写入到压缩文档。

2、Class ZipInfo

ZipFile.getinfo(name) 方法返回的是一个ZipInfo对象,表示zip文档中相应文件的信息。它支持如下属性:

ZipInfo.filename: 获取文件名称。

ZipInfo.date_time: 获取文件最后修改时间。返回一个包含6个元素的元组:(年, 月, 日, 时, 分, 秒)

ZipInfo.compress_type: 压缩类型。

ZipInfo.comment: 文档说明。

ZipInfo.extr: 扩展项数据。

ZipInfo.create_system: 获取创建该zip文档的系统。

ZipInfo.create_version: 获取 创建zip文档的PKZIP版本。

ZipInfo.extract_version: 获取 解压zip文档所需的PKZIP版本。

ZipInfo.reserved: 预留字段,当前实现总是返回0。

ZipInfo.flag_bits: zip标志位。

ZipInfo.volume: 文件头的卷标。

ZipInfo.internal_attr: 内部属性。

ZipInfo.external_attr: 外部属性。

ZipInfo.header_offset: 文件头偏移位。

ZipInfo.CRC: 未压缩文件的CRC-32。

ZipInfo.compress_size: 获取压缩后的大小。

ZipInfo.file_size: 获取未压缩的文件大小。

下面一个简单的例子说明这些属性的意思:

import zipfile, os

zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'duoduo.zip'))

zipInfo = zipFile.getinfo('文件中的文件.txt')

print ('filename:', zipInfo.filename) #获取文件名称

print ('date_time:', zipInfo.date_time) #获取文件最后修改时间。返回一个包含6个元素的元组:(年, 月, 日, 时, 分, 秒)

print ('compress_type:', zipInfo.compress_type) #压缩类型

print ('comment:', zipInfo.comment) #文档说明

print ('extra:', zipInfo.extra) #扩展项数据

print ('create_system:', zipInfo.create_system) #获取创建该zip文档的系统。

print ('create_version:', zipInfo.create_version) #获取 创建zip文档的PKZIP版本。

print ('extract_version:', zipInfo.extract_version) #获取 解压zip文档所需的PKZIP版本。

print ('extract_version:', zipInfo.reserved) # 预留字段,当前实现总是返回0。

print ('flag_bits:', zipInfo.flag_bits) #zip标志位。

print ('volume:', zipInfo.volume) # 文件头的卷标。

print ('internal_attr:', zipInfo.internal_attr) #内部属性。

print ('external_attr:', zipInfo.external_attr) #外部属性。

print ('header_offset:', zipInfo.header_offset) # 文件头偏移位。

print ('CRC:', zipInfo.CRC) # 未压缩文件的CRC-32。

print ('compress_size:', zipInfo.compress_size) #获取压缩后的大小。

print ('file_size:', zipInfo.file_size) #获取未压缩的文件大小。

zipFile.close() #

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

python中zipfile的使用_详解python3中zipfile模块用法相关推荐

  1. python socket自动重连_详解python3中socket套接字的编码问题解决

    一.TCP 1.tcp服务器创建 #创建服务器 from socket import * from time import ctime #导入ctime HOST = '' #任意主机 PORT = ...

  2. python3中unicode怎么写_详解python3中ascii与Unicode使用

    这篇文章主要为大家详解python3中ascii与Unicode使用的相关资料,需要的朋友可以参考下# Auther: Aaron Fan ''' ASCII:不支持中文,1个英文占1个字节 Unic ...

  3. python3 yield 大文件_详解Python3中yield生成器的用法

    任何使用yield的函数都称之为生成器,如: def count(n): while n > 0: yield n #生成值:n n -= 1 另外一种说法:生成器就是一个返回迭代器的函数,与普 ...

  4. python3中input输入浅谈_详解Python3中的 input() 函数

    详解Python3中的 input() 函数 一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: ...

  5. python中的iloc函数_详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

    pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称.这样内部数据抽取既可以用"行列名称(对应.loc[]方法)",也 ...

  6. python爬关键词百度指数_详解python3百度指数抓取实例

    百度指数抓取,再用图像识别得到指数 前言: 土福曾说,百度指数很难抓,在淘宝上面是20块1个关键字: 哥那么叼的人怎么会被他吓到,于是乎花了零零碎碎加起来大约2天半搞定,在此鄙视一下土福 安装的库很多 ...

  7. java中static修饰函数_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

  8. c语言中双冒号意思_详解C++中的双冒号 ::

    C++中的双冒号 ::第一种,类作用域,用来标明类的变量.函数 Human::setName(char* name); 第二种,命名空间作用域,用来注明所使用的类.函数属于哪一个命名空间的 std:: ...

  9. mysql数据库中count的作用_详解 MySQL中count函数的正确使用方法

    1. 描述 在MySQL中,当我们需要获取某张表中的总行数时,一般会选择使用下面的语句 select count(*) from table; 其实count函数中除了*还可以放其他参数,比如常数.主 ...

最新文章

  1. visual studio 64位汇编 listing列表文件
  2. 使用MAT(Memory Analyzer Tool)工具分析dump文件--转
  3. Ability的基本概念(1)
  4. java生成三级级联的数据,微信小程序三级级联,自定义json数据源
  5. linux上安装telnet服务器:linux vmvare虚拟机 安装telnet redhat9
  6. c语言磁盘文件只有写没读,C语言的磁盘文件问题
  7. 线性表之顺序表与单链表的区别及优缺点
  8. 阿里为什么禁用Executors创建线程池?
  9. python中lower的用法_Python lower()函数
  10. 我的k8s随笔:命令实践
  11. Linux 防火墙安装包下载,IPFire 2.23 Core Update 138 发布下载,Linux开源防火墙发行版...
  12. Flume之Source
  13. 为Bootstrap模态对话框添加拖拽移动功能
  14. 数据库管理员详细介绍
  15. 谷歌、斯坦福联合发文:我们为什么一定要用大模型?
  16. ubuntu 虚拟机设置全屏
  17. db2和相关驱动的下载
  18. 水仙花数的实现(python)
  19. linux下查看gaussian结构,察看Gaussian全部IOp的方法
  20. 阿里云国际版代充-阿里云无影云桌面是什么?

热门文章

  1. 信息系统集成-软件工程
  2. PCBA大讲堂:电路板焊接后为何要水洗?水洗制程、免洗制程有何差异?助焊剂的种类
  3. Zilliz 入选「2021 中国新锐技术先锋企业」
  4. v54.04 鸿蒙内核源码分析(静态链接) | 一个小项目看中间过程 | 百篇博客分析HarmonyOS源码
  5. Java算法题---查找子串的出现位置
  6. 23考研截至目前,计算机/软件等专业调剂信息集合!
  7. 必须先看完本版的版则和版主公告
  8. 图像配准(Matlab)——高分1号宽幅数据GF1WFV为例
  9. APP推荐 | 安卓手机上让人耳目一新的国产应用
  10. 维生素D成分的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告