使用Python操作压缩文件

本文介绍了如何在Python中使用zipfile模块来操作ZIP压缩文件,包括读取文件列表、获取文件信息、解压全部或指定文件,以及创建和向已有ZIP文件添加新文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们经常使用压缩程序对文件进行压缩打包,在 Python 中也提供了相应的 zipfile 模块方便我们对 ZIP 压缩文件进行操作。

读取 ZIP 压缩文件

读取 ZIP 压缩文件必须先创建 ZipFile 对象,通过调用 zipfile.ZipFile() 函数,传入 ZIP 文件名字符串就能获取到此 ZipFile 对象, ZipFile 对象与 File 对象类似,使用后需要调用 close() 函数关闭 ZIP 文件。使用 ZipFile 对象的 namelist() 方法可以返回 ZIP 文件中包含的所有文件夹和文件字符串列表。使用 ZipFile 对象的 getinfo() 方法可以传入 ZIP 里存在文件的字符串获取此文件的 ZipInfo 对象,可以再通过调用 file_size 获取文件压缩前的大小或调用 compress_size 获取文件压缩后的大小。通过计算 file_size / compress_size 就能获取到文件的压缩效率。

>>> import zipfile
>>> zf = zipfile.ZipFile('C:\\Users\\Caizi\\Python.zip')
>>> zf.namelist()
['Python/', 'Python/day01/', 'Python/day01/python01.py', 'Python/day01/python02.py', 'Python/readme.txt']
>>> readmeInfo = zf.getinfo('Python/readme.txt')
>>> readmeInfo.file_size
9239
>>> readmeInfo.compress_size
4348
>>> readmeInfo.file_size / readmeInfo.compress_size
2.124885004599816
>>> zf.close()

ZIP 压缩文件解压

使用 extractall() 函数,可以将 ZIP 压缩文件的所有内容解压到指定路径下。使用 extract() 函数,可以将 ZIP 压缩文件中的指定文件解压到指定路径下,函数返回解压后文件的绝对路径。

>>> import zipfile
>>> zf = zipfile.ZipFile('C:\\Users\\Caizi\\Python.zip')
>>> zf.extractall('C:\\zipTestAll')
>>> zf.extract('Python/readme.txt', 'C:\\zipTest')
'C:\\zipTest\\Python\\readme.txt'
>>> zf.close()

创建 ZIP 压缩文件

创建 ZIP 压缩文件必须以写模式打开 ZipFile 对象, ZipFile() 第一个参数为创建的压缩文件文件名,第二个参数为打开此文件的模式,即写模式 'w' 。使用 write() 方法将文件写入压缩文件里,第一个参数为要写入文件的文件名字符串,第二个参数为压缩算法。

>>> import zipfile
>>> zf = zipfile.ZipFile('C:\\Users\\Caizi\\new.zip', 'w')
>>> zf.write('C:\\Users\\Caizi\\zipcreate.txt', compress_type=zipfile.ZIP_DEFLATED)
>>> zf.close()

添加文件到 ZIP 压缩文件

添加文件到 ZIP 压缩文件与创建 ZIP 压缩文件方法相似,只不过在打开 ZipFile 对象时要以追加模式打开,即 ZipFile() 第二个参数设为 'a'

>>> import zipfile
>>> zf = zipfile.ZipFile('C:\\Users\\Caizi\\new.zip', 'a')
>>> zf.write('C:\\Users\\Caizi\\zipadd.txt', compress_type=zipfile.ZIP_DEFLATED)
>>> zf.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值