Python实现文件压缩和解压的示例代码


Posted in Python onAugust 12, 2020

大家可能都熟悉.zip格式的文件。它可以把多个文件,压缩成一个文件。这在网络上传输时很有用,而且节省硬盘空间。

接下来,我们使用Python实现压缩和解压。

读取ZIP文件信息

要读取ZIP文件的内容,首先必须创建一个ZipFile对象。ZipFile对象在概念上与File对象相似。

要创建一个 ZipFile 对象,就调用 zipfile.ZipFile()函数,向它传入一个字符串,表示.zip 文件的文件名。 请注意,zipfile 是 Python 模块的名称,ZipFile()是函数的名称。

import zipfile

# 传入压缩文件zfile.zip获取相关信息
zip_file = zipfile.ZipFile('zfile.zip')

# 获取压缩文件中的内容
f_content = zip_file.namelist()

# 压缩前的大小
f_size = zip_file.getinfo('zfile/a.txt').file_size

# 压缩后的大小
c_size = zip_file.getinfo('zfile/a.txt').compress_size

ZipFile 对象有一个 namelist()方法,返回 ZIP 文件中包含的所有文件和文件夹 的字符串的列表。这些字符串可以传递给 ZipFile 对象的 getinfo()方法,返回一个关 于特定文件的 ZipInfo 对象。ZipInfo 对象有自己的属性,诸如表示字节数的 file_size 和 compress_size,它们分别表示原来文件大小和压缩后文件大小。ZipFile 对象表示 整个归档文件,而 ZipInfo 对象则保存该归档文件中每个文件的有用信息。

从 ZIP 文件中解压缩

ZipFile 对象的 extractall()方法从 ZIP 文件中解压缩所有文件和文件夹,放到当 前工作目录中。

import zipfile

zip_file = zipfile.ZipFile('zfile.zip')
# 解压
zip_extract = zip_file.extractall()
zip_extract.close()

运行这段代码后, example.zip 的内容将被解压缩到 C:\。 或者, 你可以向 extractall()传递的一个文件夹名称,它将文件解压缩到那个文件夹,而不是当前工作 目录。如果传递给 extractall()方法的文件夹不存在,它会被创建。例如,如果你用 exampleZip.extractall('C:\ delicious')取代处的调用,代码就会从 example.zip 中解压 缩文件,放到新创建的 C:\delicious 文件夹中。
ZipFile 对象的 extract()方法从 ZIP 文件中解压缩单个文件。

创建和添加到 ZIP 文件

要创建你自己的压缩 ZIP 文件,必须以“写模式”打开 ZipFile 对象,即传入'w' 作为第二个参数(这类似于向 open()函数传入'w',以写模式打开一个文本文件)。

如果向 ZipFile 对象的 write()方法传入一个路径,Python 就会压缩该路径所指 的文件,将它加到 ZIP 文件中。write()方法的第一个参数是一个字符串,代表要添 加的文件名。第二个参数是“压缩类型”参数,它告诉计算机使用怎样的算法来压 缩文件。可以总是将这个值设置为 zipfile.ZIP_DEFLATED(这指定了 deflate 压缩 算法,它对各种类型的数据都很有效)。

import zipfile

zip_file = zipfile.ZipFile('new.zip','w')
# 把zfile整个目录下所有内容,压缩为new.zip文件
zip_file.write('zfile',compress_type=zipfile.ZIP_DEFLATED)
# 把c.txt文件压缩成一个压缩文件
# zip_file.write('c.txt',compress_type=zipfile.ZIP_DEFLATED)
zip_file.close()

这段代码将创建一个新的 ZIP 文件,名为 new.zip,它包含 spam.txt 压缩后的内容。
要记住,就像写入文件一样,写模式将擦除 ZIP 文件中所有原有的内容。如果 只是希望将文件添加到原有的 ZIP 文件中,就要向 zipfile.ZipFile()传入'a'作为第二 个参数,以追加模式打开 ZIP 文件。

以上就是Python实现文件压缩和解压的示例代码的详细内容,更多关于python 压缩和解压的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中使用dom模块生成XML文件示例
Apr 05 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
Python之reload流程实例代码解析
Jan 29 Python
django DRF图片路径问题的解决方法
Sep 10 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
Python爬取数据并实现可视化代码解析
Aug 12 #Python
Python下载网易云歌单歌曲的示例代码
Aug 12 #Python
Python爬取12306车次信息代码详解
Aug 12 #Python
Python读取xlsx数据生成图标代码实例
Aug 12 #Python
Idea安装python显示无SDK问题解决方案
Aug 12 #Python
Python selenium如何打包静态网页并下载
Aug 12 #Python
Python selenium爬取微信公众号文章代码详解
Aug 12 #Python
You might like
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
JavaScript中的this实例分析
2011/04/28 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python入门篇之字典
2014/10/17 Python
举例详解Python中的split()函数的使用方法
2015/04/07 Python
python中for用来遍历range函数的方法
2018/06/08 Python
学生信息管理系统python版
2018/10/17 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
Django使用rest_framework写出API
2020/05/21 Python
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
学期自我鉴定范文
2013/10/01 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
2015教师节通讯稿
2015/07/20 职场文书
高中政治教学反思
2016/02/23 职场文书
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android