Python模块zipfile原理及使用方法详解


Posted in Python onAugust 04, 2020

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

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

ZipFile是主要的类,用来创建和读取zip文件

ZipInfo是存储的zip文件的每个文件的信息的。

比如要读取一个zipfile,这里假设filename是一个文件的路径:

import zipfile
z = zipfile.ZipFile(filename, 'r') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件
for f in z.namelist():
  print f

上面的代码是读取一个zip压缩包里所有文件的名字。z.namelist() 会返回压缩包内所有文件名的列表。

再看看下面一个:

import zipfile
z = zipfile.ZipFile(filename, 'r')
for i in z.infolist():
  print i.file_size, i.header_offset

这里使用了z.infolist(), 它返回的就是压缩包内所有文件的信息,就是一个ZipInfo的列表。一个ZopInfo对象中包含了压缩包内一个文件的信息,其中比较常用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。其实之前的z.namelist()就是读取的ZopInfo中的filename,组成一个 list返回的。

从压缩包里解压缩出一个文件的方法是使用ZipFile的read方法:

import zipfile
z = zipfile.ZipFile(filename, 'r')
print z.read(z.namelist()[0])

这样就读取出z.namelist()中的第一个文件,并且输出到屏幕,当然也可以把它存储到文件。

下面是创建zip压缩包的方法:

与读取的方法其实很类似的:

import zipfile, os

z = zipfile.ZipFile(filename, 'w') # 注意这里的第二个参数是w,这里的filename是压缩包的名字

#假设要把一个叫testdir中的文件全部添加到压缩包里(这里只添加一级子目录中的文件):
if os.path.isdir(testdir):
  for d in os.listdir(testdir):
    z.write(testdir+os.sep+d)
# close() 是必须调用的!
z.close()

上面的代码非常的简单。

想想还有一个问题,如果我把一个test/111.txt 添加到压缩包里之后我希望在包里它放到test22/111.txt怎么办呢?

其实这个就是ZipFile的write方法中第二个参数的作用了。只需要这样调用:z.write("test/111.txt", "test22/111.txt")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
更改Python命令行交互提示符的方法
Jan 14 Python
Python合并两个字典的常用方法与效率比较
Jun 17 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
python如何发布自已pip项目的方法步骤
Oct 09 Python
python2和python3在处理字符串上的区别详解
May 29 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
Jun 01 Python
详解python logging日志传输
Jul 01 Python
python中pyplot基础图标函数整理
Nov 10 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 Python
Python爬虫之Spider类用法简单介绍
Aug 04 #Python
Python绘图之二维图与三维图详解
Aug 04 #Python
Python连接Impala实现步骤解析
Aug 04 #Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 #Python
Python如何给函数库增加日志功能
Aug 04 #Python
pycharm导入源码的具体步骤
Aug 04 #Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 #Python
You might like
认识并使用PHP超级全局变量
2010/01/26 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
学习php设计模式 php实现享元模式(flyweight)
2015/12/07 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
python实现下载指定网址所有图片的方法
2015/08/08 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
解决Python中回文数和质数的问题
2019/11/24 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
运动会广播稿150字
2014/02/19 职场文书
电工工作职责范本
2014/02/22 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
项目经理岗位职责
2015/01/31 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
成人成长感言如何写?
2019/08/16 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
Vue如何实现组件间通信
2021/05/15 Vue.js
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技