无需压缩软件,用python帮你操作压缩包


Posted in Python onAugust 17, 2020

写在之前

压缩包是互联网上软件发布的标准格式,同时对于系统管理很有用处。当我们需要将多份文件发送给别人的时候,最好通过压缩包的形式发送,还有在备份某些文件的时候,为了减少磁盘空间的占用,也需要对备份的数据进行压缩。

Python 中有一系列对压缩包进行处理的工具,包括创建压缩包,解压压缩包以及获取压缩包中的文件列表等,今天的文章,我们就来学习一下与压缩包相关的 Python 标准库。

管理 zip 压缩包

在大多数情况下,我们在 Windows 下使用 zip 进行压缩,在 Linux 下使用 gzip 或者 bzip2 进行压缩。这一部分,我们来看一下如何管理 zip 格式的压缩包。

1.读取 zip

Python 管理 zip 主要使用 zipfile 模块,这个模块里有一个名为 ZipFile 的对象,我们通过将 zip 压缩包的名称传递给这个对象的函数,这样就打开了一个 zip 压缩包并获得一个 ZipFile 的对象,然后使用这个对象的方法去读取 zip 压缩包里的内容。具体如下所示:

>>> import zipfile
>>> first_zip = zipfile.ZipFile('test.zip')
>>> first_zip.namelist()

namelist() 是 ZipFile 中的常用方法,初次以外还比较常用的方法有 extract,extractall:

  • namelist:返回一个列表,列表中是 zip 中包含的所有文件和文件夹;
  • extract:从 zip 中提取单个文件
  • extarctall:从 zip 文件中提取所有文件

2.创建 zip

与文件的方式类似,如果想要创建一个 zip 格式的压缩文件,必须要以「写」的模式打开 zip 文件,需要说一点的是,ZipFile 的对象是通过 write 方法来添加文件的。具体如下所示:

>>> import zipfile
>>> my_zip = zipfile.ZipFile('test.zip', 'w')
>>> my_zip.write('test.py')
>>> my_zip.close()

上面的代码是创建了一个名为 test.zip 的新 zip 文件,它包含 test.py 压缩后的内容。

管理 tar 包

tar 命令一般是在 Linux 系统中创建压缩包,并且可以指定压缩包的压缩算法。此外 tar 命令也可以创建一个不压缩的 tar 包,仅仅是为了能把多个文件进行打包便于传输。这也就是说,我们在使用 tar 命令的时候,既可以创建普通的 tar 包,也可以创建使用压缩算法压缩过的压缩包。

Python 中使用 tarfile 标准库提供了 tar 命令提供的功能,我们也可以使用它创建一个压缩或者一个非压缩的 tar 包。我之前很多次说过 Python 的简洁优雅体现在方方面面,在这里体现在 tarfile 模块比 Linux 下的 tar 命令用起来更加舒服。

1.读取 tar 包

同样读取 tar 包和 Python 的文件管理操作类似,读写一个压缩包,需要执行打开操作,同时指定打开模式,并且在操作完成以后关闭文件,当然在这里我们可以使用上下文管理器来保证文件的关闭逻辑。具体如下所示:

>>> import tarfile
>>> with tarfile.open('etc.tar') as t:
...  for member in t.getmembers():
...     print(member.name)

上面的代码中,导入 tarfile 库,使用默认的读模式打开 tar 包,tarfile.open() 函数返回一个 TarFile 对象,这个对象表示当前打开的 tar 包,我们可以通过这个对象的方法操作和读取 tar 包中的内容。

tarfile 中有不少函数,其中最常用的有 getnames,extract,extractall 函数:

  • getnames:获取 tar 包中的文件列表;
  • extract:提取单个文件;
  • extractall:提取所有文件。

2.创建 tar 包

从上面的例子中可以看到,读一个 tar 包与读一个文件类似,都是以「读」的方式打开文件并得到一个对象,然后通过这个对象的方法去操作文件。同样创建一个 tar 包和写一个文件也比较类似。具体如下所示:

>>> import tarfile
>>> with tarfile.open('etc.tar', mode='w') as f:
...   f.add('test.py')

上面的代码中,由于我们是创建一个 tar 包,所以以「写」模式打开 tar 包并得到一个 TarFile 对象,然后使用 TarFile 对象的 add 方法将 test.py 文件添加到 tar 包中。

3.tarfile 读取和创建压缩包

上面我们用 targfile 创建和读取未压缩的 tar 包,但是一般情况下,我们创建 tar 包的时候都会使用压缩算法进行压缩,以加快传输速度和减少占用的磁盘空间。

使用 tarfile 创建和读取压缩包非常简单,只要在打开文件时指定压缩算法即可。对于 tarfile 的 open 函数,以「打开模式:压缩算法」的形式打开即可。具体如下所示:

a. 读取一个用 gzip 算法压缩的 tar 包:

>>> import tarfile
>>> with tarfile.open('etc.tar', mode='r:gz') as f:

b. 创建一个用 bzip2 算法压缩的 tar 包:

>>> import tarfile
>>> with tarfile.open('etc.tar', mode='w:bz2') as f:

以上就是无需压缩软件,用python帮你操作压缩包的详细内容,更多关于python 压缩包的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现挑选出来100以内的质数
Mar 24 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
Python延时操作实现方法示例
Aug 14 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
详解python深浅拷贝区别
Jun 24 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
Python用input输入列表的实例代码
Feb 07 Python
python如何爬取网页中的文字
Jul 28 Python
python用Configobj模块读取配置文件
Sep 26 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 Python
用Python制作mini翻译器的实现示例
Aug 17 #Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 #Python
pandas apply多线程实现代码
Aug 17 #Python
简述python Scrapy框架
Aug 17 #Python
python使用多线程查询数据库的实现示例
Aug 17 #Python
python使用建议与技巧分享(一)
Aug 17 #Python
Python2.6版本pip安装步骤解析
Aug 17 #Python
You might like
也谈 PHP 和 MYSQL
2006/10/09 PHP
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
php格式化电话号码的方法
2015/04/24 PHP
PHP中“=>
2019/03/01 PHP
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
python图片验证码生成代码
2016/07/02 Python
利用python画一颗心的方法示例
2017/01/31 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
python中的字典操作及字典函数
2018/01/03 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
宾馆总经理岗位职责
2014/02/14 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
企业年度评优方案
2014/06/02 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python