如果您使用计算机已有一段时间,则可能遇到了扩展名为.zip的文件。 它们是特殊文件,可以保存许多其他文件,文件夹和子文件夹的压缩内容。 这使它们对于通过Internet传输文件非常有用。 您是否知道可以使用Python压缩或提取文件?

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

压缩单个文件

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

import zipfilejungle_zip = zipfile.ZipFile('C:\\Stories\\Fantasy\\jungle.zip', 'w')
jungle_zip.write('C:\\Stories\\Fantasy\\jungle.pdf', compress_type=zipfile.ZIP_DEFLATED)jungle_zip.close()

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

您可以指定不同的压缩方法来压缩文件。 Python 3.3版中添加了更新的方法BZIP2LZMA ,并且还有一些其他工具也不支持这两种压缩方法。 因此,仅使用DEFLATED方法是安全的。 您仍然应该尝试这些方法,以查看压缩文件大小的差异。

压缩多个文件

这有点复杂,因为您需要遍历所有文件。 以下代码应压缩给定文件夹中所有扩展名为pdf的文件:

import os
import zipfilefantasy_zip = zipfile.ZipFile('C:\\Stories\\Fantasy\\archive.zip', 'w')for folder, subfolders, files in os.walk('C:\\Stories\\Fantasy'):for file in files:if file.endswith('.pdf'):fantasy_zip.write(os.path.join(folder, file), os.path.relpath(os.path.join(folder,file), 'C:\\Stories\\Fantasy'), compress_type = zipfile.ZIP_DEFLATED)fantasy_zip.close()

这次,我们导入了os模块,并使用其walk()方法遍历了原始文件夹内的所有文件和子文件夹。 我只压缩目录中的pdf文件。 您还可以使用if语句为每种格式创建不同的存档文件。

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

fantasy_zip.write(os.path.join(folder, file), file, compress_type = zipfile.ZIP_DEFLATED)

write()方法接受三个参数。 第一个参数是我们要压缩的文件的名称。 第二个参数是可选的,允许您为压缩文件指定其他文件名。 如果未指定任何内容,则使用原始名称。

提取所有文件

您可以使用extractall()方法将所有文件和文件夹从zip文件中提取到当前工作目录中。 您还可以将文件夹名称传递给extractall()以提取特定目录中的所有文件和文件夹。 如果您传递的文件夹不存在,则此方法将为您创建一个。 这是可用于提取文件的代码:

import zipfilefantasy_zip = zipfile.ZipFile('C:\\Stories\\Fantasy\\archive.zip')
fantasy_zip.extractall('C:\\Library\\Stories\\Fantasy')fantasy_zip.close()

如果要提取多个文件,则必须提供要提取的文件名作为列表。

提取单个文件

这类似于提取多个文件。 一个区别是这次您需要首先提供文件名,然后再提供将其解压缩的路径。 另外,您需要使用extract()方法而不是extractall() 。 这是提取单个文件的基本代码段。

import zipfilefantasy_zip = zipfile.ZipFile('C:\\Stories\\Fantasy\\archive.zip')
fantasy_zip.extract('Fantasy Jungle.pdf', 'C:\\Stories\\Fantasy')fantasy_zip.close()

读取Zip文件

考虑一种情况,您需要查看zip存档是否包含特定文件。 到目前为止,您唯一的选择是提取存档中的所有文件。 同样,您可能只需要提取大于特定大小的那些文件。 zipfile模块允许我们查询档案的内容,而无需提取档案。

使用ZipFile对象的namelist()方法将按名称返回档案的所有成员的列表。 要获取有关存档中特定文件的信息,可以使用ZipFile对象的getinfo()方法。 这将使您能够访问特定于该文件的信息,例如文件的压缩和未压缩大小或其最后修改时间。 我们待会儿再讲。

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

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

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

下面的代码使用我们刚刚讨论的属性和方法仅提取那些大小小于1MB的文件。

import zipfilestories_zip = zipfile.ZipFile('C:\\Stories\\Funny\\archive.zip')for file in stories_zip.namelist():if stories_zip.getinfo(file).file_size < 1024*1024:stories_zip.extract(file, 'C:\\Stories\\Short\\Funny')stories_zip.close()

要了解上次修改存档中特定文件的时间和日期,可以使用date_time属性。 这将返回六个值的元组。 值将按该特定顺序为年,月,日,小时,分钟和秒。 年份将始终大于或等于1980,并且小时,分钟和秒从零开始。

import zipfilestories_zip = zipfile.ZipFile('C:\\Stories\\Funny\\archive.zip')thirsty_crow_info = stories_zip.getinfo('The Thirsty Crow.pdf')print(thirsty_crow_info.date_time)
print(thirsty_crow_info.compress_size)
print(thirsty_crow_info.file_size)stories_zip.close()

有关原始文件大小和压缩文件大小的信息可以帮助您确定是否值得压缩文件。 我相信它也可以在其他情况下使用。

最后的想法

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

老实说,通过编写自己的代码来压缩和提取文件对我来说也非常令人兴奋。 希望您喜欢本教程,如果有任何疑问,请在评论中告诉我。

学习Python

无论您是刚刚起步还是想学习新技能的经验丰富的程序员,都可以通过我们完整的python教程指南学习Python。

翻译自: https://code.tutsplus.com/tutorials/compressing-and-extracting-files-in-python--cms-26816

用Python压缩和提取文件相关推荐

  1. linux tar命令压缩_Linux tar命令来压缩和提取文件

    linux tar命令压缩 In this guide, we look at the Linux Tar command, Tar, short for Tape Archive, is a com ...

  2. python压缩教程_如何使用Python压缩/解压缩zip文件?(代码示例)

    在批量交换大文件和多个文件时,使用zip文件是非常方便的.下面本篇文章就来带大家认识解一下zip文件,介绍使用Python压缩或解压缩zip文件的方法,希望对大家有所帮助.[视频教程推荐:Python ...

  3. python实现:提取文件夹中子文件夹的图片

    提取文件夹中子文件里的图片的方法 主要运用到的函数 import os import shutil 首先需要获取内部文件夹的文件名 os.chdir("D:/作业/python/数据集/if ...

  4. python 如何批量提取文件中的字符_如何用Python批量提取PDF文本内容?

    本文为你展示,如何用Python把许多PDF文件的文本内容批量提取出来,并且整理存储到数据框中,以便于后续的数据分析. 问题 最近,读者们在后台的留言,愈发五花八门了. 写了几篇关于自然语言处理的文章 ...

  5. python压缩_Python札记 -- 文件压缩

    在日常工作当中免不了要对文件进行压缩,Python标准库里也提供了实现压缩功能的模块. 一.简单的例子 首先了解一下压缩单个文件在Python中怎么实现.竹风建了个测试文件夹zip_text,里面有t ...

  6. python 压缩文件 调用7z_Python:如何从Python压缩的7z文件中读取一行?

    (详细介绍收益率部分)注意,我不知道这个库,也不知道你用什么函数来获取未压缩的数据块.但我的意思是:def 7zreadline(filename): with open(filename, 'rb' ...

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

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 如果你已经使用计算机一段时间,你可能遇到了.zip扩展名的文件.它们是可以保存许多其他文件,文件夹和子文件 ...

  8. Python学习笔记(一)压缩与解压缩文件

    Python压缩与解压缩文件 Python能够直接处理zip文件中的数据,例如需要将对应目录或多文件打包或压缩成zip格式,或者需要查看一个zip格式的归档文件中部分或所有的文件同时避免将这些文件展开 ...

  9. python批量解压文件,python批量解压zip文件的方法

    python怎样压缩和解压缩ZIP文件 说明 python使用zipfile模块来压缩和解压zip文件 才能最好于孤独中培养:品格最好在世界的汹涌波涛中形成. 代码 import os,os.path ...

最新文章

  1. 沈航计算机复试刷人,过来人的血泪教训:复试被刷原因大盘点
  2. 山东赛区国赛答辩成绩公示
  3. 每天一个Linux命令 7
  4. 根据当前docker容器生成镜像提交到远端服务器
  5. 【Web网站服务器开发】Apache 和 Tomcat的区别及配置
  6. 《Redis入门指南》第2版 读书笔记
  7. w3school入门自学免费网站推荐
  8. linux手术后10年,经历正颌手术10年后遗症的我想说40岁做正颌手术我很后悔
  9. mysql tode_FAQ: MyDB Studio for MySQL
  10. c语言函数返回数组_C语言如何用一维数组拷贝函数,拷贝二位数组(C Primer Plus 10-7)...
  11. redfish、ipmi返回状态码
  12. 财务人的编程自学之路
  13. linux压缩文件方式,在 Linux 上压缩文件的 5 种方法
  14. 创建可引导的 macOS High Sierra 安装 U 盘
  15. unity新粒子系统的碰撞和触发
  16. 6-1 数一数每个数据出现多少次,挑出出现次数最多的那一个
  17. office2010打开excel文档时为空白的解决方法
  18. SpringMVC前端控制器的配置理解
  19. 21条最佳实践,全面保障 GitHub 使用安全
  20. 我是一只IT小小鸟读后感

热门文章

  1. Excel小账本使用说明
  2. 延迟复工,待岗期间工资怎么发?在家上班工资咋算?
  3. css3立体三角,利用CSS3新特性创建透明边框三角
  4. 解析音频输出调节音量的原理以及调节的方法
  5. 海贼OJ并查集练习题:朋友圈
  6. [组装电脑DIY]#nvidia GeForce GTX1070ti 公版#开箱图赏
  7. 猎聘招聘网数据可视化
  8. 算法实战应用案例精讲-【自动化办公】使用Python解析web页面(python代码实战)
  9. 智能晾衣机调研:头部品牌格局初步形成,前三强占据33%份额
  10. uniapp上传图片和视频到OSS