一、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文档,

参数mode的三种模式实例

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() #

python3 zipfile模块 zip压缩解压相关推荐

  1. Python zipfile模块(压缩解压zip)

    目录 常用函数介绍 ZipFile.getinfo(name) ZipFile.infolist() ZipFile.namelist() ZipFile.extractall(member[, pa ...

  2. Java中zip压缩解压

    1. 解压问题 360压缩文件 使用jdk API 读取压缩文件后解压,报错 java.lang.IllegalArgumentException:MALFORMED 如果是好压压缩文件,使用jdk ...

  3. android 解压加密zip,zip压缩解压加密器

    zip压缩解压加密器是一款非常好用的手机文件压缩解压应用软件,zip压缩解压加密器app为用户提供了各种文件压缩功能,可以批量操作,一键解压文件.感兴趣的朋友欢迎使用西西下载! 基本内容 zip压缩解 ...

  4. Python 基础 之 zipfile 文件夹压缩/解压方法的简单整理

    Python 基础 之 zipfile 文件夹压缩/解压方法的简单整理 目录

  5. zip包怎么解压oracle,使用jar与zip压缩解压文件的区别

    使用jar命令压缩和解压文件不会继承原来的权限,切记! 而使用zip/unzip压缩解压文件则会保留文件原来的权限等信息,因此使用压缩解压的时候尽量使用专业的工具 下面是测试内容和结果: 1.首先确认 ...

  6. linux下gz和tar.gz、zip压缩解压

    文章目录 说明 分享 tar.gz 常用命令 gz 常用命令 zip 常用命令 总结 说明 本博客每周五更新一次. 日常数据处理中,经常需要压缩数据文件,减小传输带宽,方便分享和存储,整理gz.tar ...

  7. C#实现多级子目录Zip压缩解压实例

    参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩,类似winrar,可以选择是否排除基准 ...

  8. java 分卷压缩_Apache Commons Compress介绍-Zip压缩解压

    Zip格式应该是最出名的压缩格式之一了,zlib.gzip这些辈分很老的库大家应该都用过,甚至大部分其他格式的压缩库,都可以处理zip格式.Commons Compress当然也少补了对zip格式的支 ...

  9. Java-工具类之ZIP压缩解压

    概述 实例 zip压缩单个或者多个文件 unzip到指定目录 zip目录及子孙目录 不解压读取zip中的文件列表 概述 整理ZIP相关的工具类 实例 代码已托管到 https://github.com ...

最新文章

  1. core控制器属性注入的用处_了解ASP.NET Core 依赖注入,看这篇就够了
  2. 互联网时代的应用设计,互联网营销
  3. SpringBoot与MyBatis技术集成
  4. 转置与变换(Transposes and Permutation)
  5. Oracle 大规模 delete,update 操作 注意事项
  6. 没想到我的粉丝里还有这么多C++er,瑞思拜!
  7. dubbo学习之源码创建属于自己的dubbo-demo
  8. python获取程序运行路径
  9. 计算机动漫与游戏制作电脑配置,动漫与游戏设计该如何选电脑配置?
  10. PSD文件太大?高效压缩插件!
  11. 计算机英语背诵发音,英语26个字母的标准发音 26个字母背诵顺口溜
  12. python常见开源库整理
  13. Oracle数据库建立表空间数据库表
  14. 目标检测网络之三叉戟TridentNet
  15. 面试造火箭系列,栽在了cglib和jdk动态代理
  16. 【算法基础26】贪心下——哈夫曼树、排序不等式、绝对值不等式、推公式的思路与应用
  17. 美丽天天秒源码部分核心源码分享
  18. 汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp
  19. 独孤思维:刷新赚钱认知
  20. 24-系统自带的 Win+R 功能

热门文章

  1. 电信设备产品简介材料收集
  2. Windows 08R2_AD图文详解
  3. NR 5G NG-AP(NG接口)介绍
  4. 网络编程 TCP学习
  5. Eslint中no-undef的检查报错
  6. redis入门及java操作
  7. SolrJ查询Solr数据
  8. 5G NR - 总体架构与物理层
  9. 数据结构——马踏棋盘题解(贪心算法)
  10. SOA面向服务架构打包部署