Python zipfile模块

1,305 阅读4分钟

玩转Python

这是我参与8月更文挑战的第7天,活动详情查看: 8月更文挑战

回顾复习

我们上一次学习了Python文件目录高级操作-shutil模块。在shutil模块中,不仅提供提供了对文件/目录进行拷贝、移动、删除操作,还提供了对文件进行归档、压缩和解压缩的方法。

我们在学习之前,先来学习在shutil模块下比较混淆的地方

⭐疑问一:归档、压缩等名词傻傻分不清?

  • 归档:也称为打包。

    (1)方式:将多个文件合并到一个文件当中

    (2)特点:归档文件没有经过压缩,它占用的空间是所有文件和目录的总和

  • 解包

    (1)方式:将文件/目录集合(归档)的文件进行释放。 (2)特点:与归档操作是逆向的

  • 压缩

    (1)方式:压缩时将多个文件进行有损或者无损的合并到一个文件当中。

    (2)特点:压缩文件采用了不同的存储方式,它占用的空间比所有文件或者目录总和要小

  • 解压缩

    (1)方式:将压缩文件中的多个文件,释放出来。

    (2)特点:是压缩的反向操作

🌈疑问二:Python对于归档压缩和解压缩提供了多少个模块?

归档压缩/解压缩操作

本次,我们主要学习Python内置的zipfile模块常用的方法,实现对文件压缩和解压缩的操作方法,废话不多说,带上耳机🎧、播放音乐🎼,开始今天的学习之旅💃💃💃~

1. zipfile模块常用方法

zipfile模块用于文件的压缩操作,提供类(标新)和常用的方法如下:

方法作用
⭐ zipfile.ZipFileZIP文件的读写操作
⭐ zipfile.PyZipFile创建包含Python库的ZIP归档文件
⭐ zipfile.ZipInfo归档文件中的一个成员信息
zipfile.is_zipfile()判断filename是否是有效的ZIP文件,并返回一个布尔类型的值
zipfile.ZIP_STORED表示一个压缩的归档成员
zipfile.ZIP_DEFLATED表示普通的ZIP压缩方法,需Zlib模块支持
zipfile.ZIP_BZIP2表示BZIP2压缩方法,需bz2模块支持
zipfile.ZIP_LZMA表示LZMA压缩方法,需lzma模块支持

📣 重要说明:

  • zipfile.ZipFile类:常用于创建、打开zip文件对象

    (1) 可以与上下文管理器with进行使用

    (2)zipfile.ZipFile类对象提供的方法有:write(),read(),close(),extract()等方法

    标题作用
    getinfo (filename)返回一个ZipInfo对象
    infolist()返回包含每个压缩文件的ZipInfo
    namelist()返回按文件名称排序的压缩文件列表
    open(filename)以二进制文件类的形式访问一个归档文件,可与上下文管理器一起使用
    write(filename,arcname)将文件写入压缩文件里
    read(filename)返回压缩文件的字节数据
    printdir()将压缩文件里的目录打印到sys.stdout
    extract()将单个压缩文件进行解压
    extractall()将多个压缩文件进行解压
  • zipfile.PyZipFile:创建包含Python库的ZIP归档文件

    (1)PyZipFile构造方法与ZipFile构造方法参数相似,多了一个optimize参数

    (2)PyZipFile实例方法比ZipFile多了一个writepy()方法

  • zipfile.ZipInfo:归档文件中的一个成员信息

    (1)通过ZipFile实例对象调用getinfoll来获取ZipInfo实例对象

    (2)归档文件中成员的如filename、date_time、compress_type等信息方法

2. zipfile模块压缩操作

📚压缩实现步骤:

  1. 创建压缩文件:zp = zipfile.ZipFile()

  2. 在zip文件中添加内容:zp.write(filename, arcname) 只能对文件进行添加,如果添加的是文件夹,则压缩结果是一个空的文件夹

  3. 关闭压缩文件:zp.close()

import zipfile

z = zipfile.ZipFile("test.zip","w")

z.write('test1.txt')
z.write(r'./New/New10_test.txt')
z.write(r'./old/old6_test/test.txt')



z.close()

print(z.printdir())

zipfile对文件压缩运行结果

压缩文件

3. zipfile模块解压操作

📗📘📙解压:

  1. 创建ZipFile实例,打开zip文件:zp = zipfile.ZipFile(zip_path, 'r')

  2. 解压文件操作:

    (1)指定其中的某个单个文件:zp.extract(member, path)

    (2)解压全部文件:zp.extractall(path)

  3. 关闭文件:zp.close()

z = zipfile.ZipFile("test.zip","r")

z.extract('test1.txt','./zip')

z.extractall('./zip3')

解压单个文件操作运行结果

解压全部文件运行结果

总结

本期,我们对归档、压缩等概念,以及目前Python对文件目录进行压缩和解压的模块全面的知悉。

同时,针对zipfile模块提供的类及方法,进行学习和掌握,方便在我们日常工作中进行使用

以上是本期内容,欢迎各位大佬点赞评论,下次见~