Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

如果你已经使用计算机一段时间,你可能遇到了.zip扩展名的文件。它们是可以保存许多其他文件,文件夹和子文件夹的压缩内容的特殊文件。这种类型的文件在使用互联网传输文件时非常有用。Python也可以用来压缩或解压文件,你知道吗?

本教程将教你如何在Python中使用zipfile模块,同时提取或压缩单个或多个文件。

压缩单个文件

这很容易,而且只需很少的代码。我们先导入zipfile模块,然后通过指定第二个参数为“w”在写模式下打开ZipFile对象。第一个参数是文件本身的路径。代码如下:

请注意,我的所有代码片段中使用了Windows样式格式指定路径;如果您使用的是Linux或Mac,则需要进行相应的更改。

可以指定不同的压缩方法来压缩文件。在Python 3.3版本中添加了新的BZIP2和LZMA方法,但有一些工具还不支持这两种压缩方法。因此,比较安全的用法是使用DEFLATED方法。你仍然可以尝试这些方法来查看压缩文件大小的差异。

压缩多个文件

这稍微有点复杂,因为你需要遍历所有文件。下面的代码展示了如何压缩指定文件夹下的所有扩展名为pdf的文件:

这一次,我们导入了os模块,并使用它的walk()方法来遍历所有文件和子文件夹,并且只压缩pdf文件。你可以使用if语句为每种格式创建不同的归档文件。

如果不想保留目录结构,可以使用以下行将所有文件放在一起:

write()方法接受三个参数:第一个参数是我们要压缩的文件的名称;第二个参数是可选的,可以为压缩文件指定不同的文件名;如果未指定任何内容,则使用默认名称。

提取所有文件

你可以使用extractall()方法将所有文件和文件夹从zip文件解压缩到当前目录。你还可以将文件夹名称传递给extractall(),以解压缩特定目录中的所有文件和文件夹。如果文件夹不存在,此方法将会自动创建。代码如下:

如果想提取其中的多个文件,需要提供包含文件名称的列表。

提取单个文件

和提取多个文件相似。区别是,这次你需要指定文件名和解压目录;需要使用extract()方法,而不是extractall()。下面是一个提取单个文件的代码片段:

读取Zip文件

考虑以下场景:你需要查看zip存档是否包含特定文件。到目前为止,你唯一的选择是通过解压所有文件。同样,你也可能只提取大于特定大小的文件。其实zipfile模块允许我们查询存档的内容,而不必提取它。

使用ZipFile对象的namelist()方法将按名称返回归档的所有成员的列表。要获取档案中特定文件的信息,可以使用ZipFile对象的getinfo()方法。这将允许您访问特定文件的信息,例如文件的压缩前后的大小或其上次修改时间。

当有很多文件需要处理时,对所有文件逐个调用getinfo()方法可能是一个令人讨厌的过程。在这种情况下,可以使用infolist()方法返回包含归档中每个成员的ZipInfo对象的列表。列表中这些对象的顺序与实际zip文件的顺序相同。

您还可以使用read(file)方法从归档中直接读取特定文件的内容,其中file是要读取的文件的名称。为此,必须以读取或追加模式打开归档。

要从归档中获取单个文件的压缩大小,可以使用compress_size属性。同样,要知道未压缩的大小,可以使用file_size属性。

以下代码使用刚才讨论的属性和方法来提取大小低于1MB的文件。

要知道归档中特定文件最后修改的时间和日期,可以使用date_time属性。这将返回一个包含六个值的元组,分别对应年、月、日、日、时、分、秒。年份总是大于或等于1980,时、分、秒是从零计算的。

有关原始文件大小和压缩文件大小的信息可以帮助您决定是否值得压缩文件。我相信它可以用于其他一些场景。

最后的想法

从本教程中能看到,使用zipfile模块来压缩文件有很大的灵活性。可以根据类型、名称或大小将目录中的不同文件压缩到不同的归档。你还可以决定是否要保留目录结构。同样,在提取文件时,您可以根据自己的标准,如大小等,将它们提取到所需的位置。

实际上,通过编写我自己的代码来压缩和提取文件也是非常令人兴奋的。我希望你喜欢的教程,如果你有任何问题,请让我知道的意见。

英文原文:https://code.tutsplus.com/tutorials/compressing-and-extracting-files-in-python--cms-26816

译者:奇迹

python解压到指定文件夹_在Python中压缩和解压文件相关推荐

  1. ps快捷图标在哪个文件夹_在PS中制作一个下载文件夹的图标

    在PS中制作一个下载文件夹的图标 出处:多特软件站  时间:2011-03-17  人气:1287我要提问我来说两句 核心提示:在这个教程里,我们将介绍到如何在PS中运用不同的形状和反射制作一个下载文 ...

  2. Linux中压缩和解压(gzip压缩/gunzip解压)(zip压缩/unzip解压)(tar打包解压)

    文章目录 Linux中压缩和解压(gzip压缩/gunzip解压)(zip压缩/unzip解压)(tar打包解压) 一.gzip压缩 / gunzip解压 1.命令 2.注意 3.案例 4.常用 二. ...

  3. python批量移动文件到指定文件夹_使用python批量将文件夹中的文件移动到某个文件夹下...

    我是用来移动图片的,其他格式的文档也是可以的,改下后缀列表就可以了 import os,shutil import datetime #将文件夹里的图片全部移动到新文件夹中 #revised by S ...

  4. linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统

    这段时间在学习python,接触到了网络编程中的socket这块,加上自己在用的Linux服务器都是原生支持python的,于是乎有了个做文件传输功能程序的想法. 毕竟python语言中,有下载功能的 ...

  5. python如何创建一个文件夹_利用Python怎么创建一个文件夹

    利用Python怎么创建一个文件夹 发布时间:2020-12-08 14:48:04 来源:亿速云 阅读:91 作者:Leah 这期内容当中小编将会给大家带来有关利用Python怎么创建一个文件夹,文 ...

  6. python生成多级文件夹_利用 python 遍历多级文件夹处理不同文件

    需求:近期,同事在处理文件的时候,常常需要从一堆文件中提取一些数据信息: 分析:由于每个文件夹下面的文件或文件夹多如牛毛,文件类型也很多种,需要针对不同文件类型做处理,人工处理是不现实的,只能用脚本处 ...

  7. mcldownload文件夹_我的世界存档在哪个文件夹及导入存档的方法介绍

    现在很多游戏都有存档功能,我的世界也不例外,有些玩家想知道我的世界存档在哪个文件夹,今天就让小编告诉大家我的世界电脑存档位置吧. 我的世界存档在哪个文件夹 电脑版我的世界: 在我的电脑里找我的世界的根 ...

  8. 启用tim无法访问文件夹_如何在三星手机上启用安全文件夹

    启用tim无法访问文件夹 The Secure Folder is a useful feature on Samsung devices that allows you to keep apps a ...

  9. putty怎么进入文件夹_如何利用putty工具上传文件 - 卡饭网

    图解使用FTP工具上传文件以FlashFXP为例 图解使用FTP工具上传文件以FlashFXP为例 现以FlashFXP为例,图解使用FTP工具上传文件. 1: 运行 LeapFTP,点击1处(站点- ...

  10. Qt-qrc资源文件-rcc打包-程序调用-ZIP压缩和解压-安装程序制作参考

    文章目录 1.qrc文件编辑 2.将qrc文件转位rcc 3.资源使用 4.ZIP压缩和解压 4.1.解压 4.2.压缩 5.错误 6.作者答疑 将程序的资源文件打包在程序的应用程序内,能够使程序保持 ...

最新文章

  1. linux主题文件,美化你的Linux!23个精美Ubuntu主题下载
  2. java 调用autoit_Java中调用AutoIt操作控件
  3. requsets模块和beautifulsoup模块
  4. 计算机科学与技术及应用,计算机科学与技术的应用及发展趋向
  5. 【5分钟 Paper】Deep Recurrent Q-Learning for Partially Observable MDPs
  6. android+3.1.2+imagebutton监听,button以及Imagebutton的使用
  7. Qt Creator 使用教程
  8. RuoYi-Vue前端分页
  9. Visual Studio 2015 介绍
  10. 如何从零起步学习AI
  11. xp系统网上邻居看不到局域网电脑_Win7系统网上邻居看不到局域网中其他电脑怎么办...
  12. 异星工厂 自动机器人_Factorio:“终极”自动工厂简介
  13. 【Web】CSS实现鼠标悬停实现显示与隐藏 特效
  14. Nomad 多job/group/task调度测试
  15. nginx交叉编译流程
  16. Linux内网测试80端口带宽,Linux Centos测试服务器上行下行带宽,服务器带宽测速...
  17. JVM内存中的年轻代,老年代
  18. 广播级4K超高清非编系统
  19. ASP校园网站相册管理系统设计与实现
  20. 2021-2027全球与中国电子邮件自动化软件市场现状及未来发展趋势

热门文章

  1. 抢先看!Kubernetes v1.21 新特性一览
  2. 一招上手!这样设计扛住亿级流量活动系统
  3. 看似简单的搜索引擎,原来背后的数据结构和算法这么复杂?
  4. linux烧录文件的格式,制作emmc 烧录文件
  5. amos调节变量怎么画_插画师该怎么收费?两个方法一看就懂。
  6. 以太坊白皮书_以太坊发展历程
  7. 使用html() undefined_SweetAlert2使用教程
  8. 三角形已知边长求高公式_五年级数学:“长方形、正方形、三角形、平行四边形、梯形” 知识重点、难点全解析,附习题!...
  9. RabbitMQ非root用户安装(Linux环境)
  10. 解决Linux操作系统下AES解密失败的问题