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的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
python中enumerate函数用法实例分析
May 20 Python
python中字典(Dictionary)用法实例详解
May 30 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
Python 互换字典的键值对实例
Feb 12 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
基于Python的Post请求数据爬取的方法详解
Jun 14 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
python 三元运算符使用解析
Sep 16 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
多个python文件调用logging模块报错误
Feb 12 Python
python爬虫之selenium库的安装及使用教程
May 23 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
Python程序设计入门(3)数组的使用
2014/06/16 Python
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
python图书管理系统
2020/04/05 Python
python实现电子产品商店
2019/02/26 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
期末考试动员演讲稿
2014/01/10 职场文书
面试后的英文感谢信
2014/02/01 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
文化大革命观后感
2015/06/17 职场文书
三八节祝酒词
2015/08/11 职场文书
导游词之无锡梅园
2019/11/28 职场文书