python解压到指定文件夹_在Python中压缩和解压文件

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

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

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

压缩单个文件

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

1920f28a76364925ac293fae1749963b.png

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

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

压缩多个文件

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

3549f85277af4c2c987922f0ef2e4661.png

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

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

ab9c9400aa634a95822272289cf56fb1.png

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

提取所有文件

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

b1ad197075f9482fbf2ea0acc79f3c5d.png

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

提取单个文件

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

883bdbce5bec4982bc8618c361b84845.png

读取Zip文件

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

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

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

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

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

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

bfe763043673453798fa01bfd7418d6c.png

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

f89da862264843f796f5baae8c54c1b3.png

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

最后的想法

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

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

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

译者:奇迹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android bar布局,Android学习路线(十)如何将Action Bar叠放在你的布局上

默认状况下,action bar出如今activity窗口的顶部,略微减小了activity布局的总空间。若是你想隐藏或者显示action bar,在这堂用户体验的课程中,你能够经过调用htmlFigure 1. Gallerys action bar in overlay mode.android为了不在a…

geant4运行例子_Geant4--一次编译,运行多个Run,极大提升模拟效率

文|梁佐佐应唐光毅博士/后之约,对于Geant4模拟,我们看是否能解决这么一个问题:我现在想模拟探测器不同角度下的响应,每次模拟需要/run/beamOn 100, 可是我真的不想一遍一遍的去http://DetectorConstruction.cc中修改几…

echart实现3d地图_3D飞线效果——让线“飞”起来的秘密

在城市规划、统计、交通等行业,地图可视化已成为最直接也最吸引眼球的一种表达方式。例如人群迁徙、人口流动、OD出行、职住分析、客流来源等众多场景都需要用到飞线效果呈现。2D飞线效果图随着可视化技术的进一步发展,传统的2D飞线效果略显单调&#xf…

ad域管理与维护_在NAS SMB卷上使用VisualSVN Server维护代码库

VisualSVN Server[1] 是 Windows 平台上流行的 SVN 形式的代码管理工具。以下我们将介绍把 NAS SMB 卷作为 VisualSVN 代码库存储中心时会遇到的几个问题以及相应的解决方法。1. 安装错误的解决方法我们以 VisualSVN Server 3.3.1 版本为例,在安装 VisualSVN Server…

电脑文件夹可以分屏的软件_电脑上什么便签软件可以添加音频?

提及便签,很多人都会很自然地想到手机便签。这是因为随着智能手机和移动互联网的发展,现在很多手机上都有了系统自带的便签app。其实,除了手机便签外,还有电脑便签呢!这不,Win7及其以上版本的电脑上还有系统…

jsp form提交到后台中文乱码_JSP与servlet之间的数据传递

【51】Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp;使用request、response对象完成传值,具体实现如下:Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet&#xff0c…

android jni 中jnienv,android JNI中JNIEnv類型和jobject類型的解釋

JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_sayHello (JNIEnv *env, jobject obj){cout<}對於這個方法參數中的JNIEnv* env參數的解釋:JNIEnv類型實際上代表了Java環境&#xff0c;通過這個JNIEnv* 指針&#xff0c;就可以對Java端的代碼進行操作。例如&#xff0c;…

yang模型中rpc_领域驱动模型(DDD)设计讲解

一. 什么是领域驱动模型(DDD)&#xff1f;领域驱动模型一种设计思想&#xff0c;我们又称为DDD设计思想。是一种为了解决传统设计思想带来的维护困难&#xff0c;沟通困难和交互困难而产生的一种新的思想。也解决了在部分公司中&#xff0c;一个项目组就是一套服务&#xff0c;…

鸿蒙系统操作界面跟苹果很像,鸿蒙手机UI界面曝出!图标拟物化、操作逻辑近似苹果iOS13...

原标题&#xff1a;鸿蒙手机UI界面曝出&#xff01;图标拟物化、操作逻辑近似苹果iOS13​【IT爆料王-原创文章-具备版权效力】就在近日&#xff0c;笔者收到了网友的匿名私信&#xff0c;提供给笔者华为鸿蒙系统的UI界面截图&#xff0c;以及搭载鸿蒙系统的华为手机的曝光图片。…

crtsiii型无砟轨道板_无砟轨道裂缝破损怎么修补

随着高速铁路、客运专线、城市地铁的快速发展&#xff0c;无砟轨道轨道板&#xff08;道床板&#xff09;广泛应用&#xff0c;但施工中和运营期都发现轨道板混凝土存在不同程度的微细裂缝&#xff0c;对无砟轨道造成了一定的病害。高铁轨道板裂缝是不可避免的。为确保无砟轨道…

c调用python第三方库_Python使用ctypes模块调用DLL函数之C语言数组与numpy数组传递...

在Python语言中&#xff0c;可以使用ctypes模块调用其它如C语言编写的动态链接库DLL文件中的函数&#xff0c;在提高软件运行效率的同时&#xff0c;也可以充分利用目前市面上各种第三方的DLL库函数&#xff0c;以扩充Python软件的功能及应用领域&#xff0c;减少重复编写代码、…

妲己机器人怎么升级固件_台湾重金设计的3D妲己,亮瞎了

大家还记得前几天米醋分享的国内首档二次元选秀&#xff0c;遭网友疯狂吐槽&#xff1a;不知道怎么形容的丑&#xff01;当米醋看到了这档综艺的宣传海报时瞬间被这一批选手的颜值所吸引&#xff01;太魔幻了&#xff01;没成想看到3D人物效果时米醋却被这盛世丑颜丑到裂开&…

go语言通道插入0_Go语言入门必知教程-通道

Golang提供了一种称为通道的机制&#xff0c;用于在协程之间共享数据。当函数作为协程执行并发活动时&#xff0c;需要它们共享资源或数据&#xff0c;通道便充当协程之间的管道(管道)&#xff0c;提供一种确保同步交换数据的机制。需要在声明通道时指定数据类型&#xff0c;可…

aes加密字符串c++_springboot2.2.X手册:防抓包?快速实现API接口数据加密

溪云阁&#xff1a;专注编程教学&#xff0c;架构&#xff0c;JAVA&#xff0c;Python&#xff0c;微服务&#xff0c;机器学习等&#xff0c;欢迎关注上一篇&#xff1a;springboot2.2.X手册&#xff1a;redis的7种类型100个方法全解析有没有遇到这样子的接口&#xff0c;放到…

鸿蒙系统打造完备终端,搭载鸿蒙系统的手机很快推出,华为生态更加完善

2019年的8月9日&#xff0c;在华为开发者大会上华为向大家正式的发布了一款操作系统——鸿蒙系统。这个系统备受大家的关注&#xff0c;鸿蒙2.0的发布也在时刻期待中。因为在目前的操作系统中&#xff0c;华为的鸿蒙操作系统是仅次于安卓、ios的存在&#xff0c;而今日&#xf…

python给图片加半透明水印_Python 批量加水印就这么简单!

工作的时候&#xff0c;尤其是自媒体&#xff0c;我们必备水印添加工具以保护我们的知识产权,网上有许多的在线/下载的水印添加工具&#xff0c;但他们或多或少都存在以下问题&#xff1a; 在线工具需要将图片上传到对方服务器&#xff0c;信息不安全。 很多工具不具备批量处理…

html 选中状态,html默认选中状态

html中标签用法解析及如何设置selec标签定义和用法 select 元素可创建单选或多选菜单。当提交表单时&#xff0c;浏览器会提交选定的项目&#xff0c;或者收集用逗号分隔的多个选项&#xff0c;将其合成一个单独的参数列表&#xff0c;并且在将 表单数据提交给服务器时包括 nam…

wxpython制作表格界面_[Python] wxPython 菜单栏控件学习总结(原创)

1、总结 1、大体创建过程 1、创建一个 菜单栏 : menuBar wx.MenuBar()相当于这个白色地方&#xff0c;没有File这个菜单 2、创建 菜单 : fileMenu wx.Menu()这两个不是直接“用的”&#xff0c;叫菜单。既用来分类其他 菜单项 的文件夹样 3、创建 菜单项 : newItem wx.MenuI…

android 8三星note8,信息太多很烦琐?告诉你三星Note8有妙招

不知从何时开始&#xff0c;我们眼前的信息变得丰富而繁杂。简洁的新闻无需经过报纸过滤&#xff0c;发生数分钟已经城皆知。预测晴雨也无需依靠天气先生&#xff0c;点亮手机即可洞悉风雨。生活在信息时代的我们仅用几英寸的窗口观察世界&#xff0c;信息的洪流难免会遮蔽眼前…

python做excel表格教程视频_基于Python实现excel表格读写

首先安装对应的xlrd和xlwt 打开cmd命令窗口输入pip install xlrd和pip install xlwt就可以安装。之后输入pip list检查是否成功配置&#xff1a;xlrd操作# 接下来就是常用的语法操作&#xff1a; excel_data xlrd.open_workbook(文件路径)#得到对应的工作表 sheet excel_data…