写在之前

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

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压缩教程_无需压缩软件,用python帮你操作压缩包相关推荐

  1. spark python入门教程_你是如何自学 Python 的?

    我是机械类专业出身,现在在一家NGO组织从事数据分析方面的工作,主要的工具是Python.SQL.Spark.平时会写一些分析用的脚本,偶尔会写写爬虫,跑跑算法,应该说Python算是我吃饭的家伙,很 ...

  2. python儿童画教程_儿童节教你用 Python 画出童年回忆

    作者 | 张同学 来源 | 凹凸数据 大家好,我是张同学. 又到一年一度的国际儿童节,作为逢节必过的程序猿,怎么可以放过这个学习技能的机会呢? 于是,今天我们来学习 Python 的 Turtle 库 ...

  3. python热身教程_我回来拉,Python热身篇:)

    用法很简单,把apihelper.py的路径添加到Python搜索路径内,然后将对象当作参数传给info函数即可.如: >>> li = ['aa','bb'] >>&g ...

  4. python bokeh教程_交互式数据可视化在Python中用Bokeh实现

    Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Python库.这是Bokeh与其它可视化库最核心的区别.正如下图所示,它说明了Bokeh如何将数据展示到一个Web浏览器上的流程. 正如你 ...

  5. python 状态机教程_一个非常简陋的python状态机

    最近琢磨撸个小家电(雾),要用到状态机,比如开了之后调节温度,定时,启动,暂停啥的,每个状态能跳到特定的几个状态里面去. 然后看了别人写的python状态机,啊那个接口写的我实在看不懂,自己上手抄吧, ...

  6. python tk教程_【转】【Python】Tkinter教程

    什么是Tkinter? Tkinter 是 Python 的标准 GUI 库.Python 使用 Tkinter 可以快速的创建 GUI 应用程序. 由于 Tkinter 是内置到 python 的安 ...

  7. python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析

    Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...

  8. python认证教程_基于 Python+SendCloud 的邮箱认证

    项目简介:为了方便日后密码遗忘进行修改或者进行消息推广等,现在各大网站在注册的时候总是免不了填写邮箱验证邮箱的流程.本门课程将通过使用 SendCloud 提供的 API 来实现一个本地版的邮箱认证过 ...

  9. python爬虫设计在哪里_《python 爬虫教程 知乎》 怎样用Python设计一个爬虫模拟登陆知乎...

    <python 爬虫教程 知乎> 怎样用Python设计一个爬虫模拟登陆知乎 python 爬虫教程 知乎2020-09-23 01:45:13人已围观 怎样用Python设计一个爬虫模拟 ...

最新文章

  1. 扫盲 docker 常用命令
  2. Jax-RS自定义异常处理
  3. scp跨主机拷贝工具
  4. 【华为云技术分享】云小课 | 华为云镜像服务扫盲帖——汇集5大功能,21个常见案例
  5. 2018.02.26 9周4次课
  6. 湖南2021年高考成绩查询与录取查询课件,@所有高考生,高考成绩和录取动态查询方式公布...
  7. 数据结构之链表及实现
  8. Java中使用各种方式实现网页跳转
  9. js实现身份证号查询相关信息
  10. 锁定计算机和睡眠有什么区别,电脑win7休眠和睡眠有什么区别?
  11. java练习题-猜数字游戏
  12. check if DVE variable is valid
  13. 新年亲朋好友最经典的“互相伤害”,你中过几条?
  14. Oracles数据库学习笔记(三)多表查询
  15. vue 列表展开收起
  16. python读matlab.fig_python可视化:matplotlib学习笔记
  17. 蒙特卡洛方法试验的一般过程和经典例子
  18. Educoder计算机数据表示实验(HUST)-汉字国标码转区位码实验偶校验编码设计logisim
  19. 马扎克 MAZAK CNC数据采集smart、smooth(smooth-c、smooth-g、smooth-x)、matrix(nexu、nexu2)以及640(640m、640mn、640t)系列
  20. 建筑施工网络优化名词解释,网络规划与优化技术

热门文章

  1. 阿里 P8 员工招聘私人助理被辞退;微信上线「拍一拍」功能;FreeBSD 11.4 释出 | 极客头条...
  2. “不要害怕 RAID!”
  3. 写给那些远程办公程序员的建议!
  4. 不为人知的 35 个 More Effective C++ 改善编程与设计的最佳方法 | 原力计划
  5. 一套代码两端运行不靠谱?是时候放弃 C++ 跨 Android、iOS 端开发!
  6. Windows 7,难说再见
  7. 腾讯被迫下架《怪物猎人世界》;传谷歌将支持 Win10 ;苹果或将复活 MagSafe | 极客头条...
  8. 阿里布局无人驾驶;滴滴成立汽车服务;“京东 AI 天团”首亮相| CSDN极客头条...
  9. Rust 逆袭!位列 Stack Overflow 2018 最受欢迎编程语言榜首
  10. python游戏房间_Python House冒险-如果已经进入一个房间,如何给出不同的输出