文章目录[隐藏]
描述如何使用、压缩和解压缩 ZIP 文件以及查看 ZIP 文件信息的 mod。
标准库中的模块可用于压缩和解压缩 ZIP 文件。以下是它们的使用教程和示例。
检查文件是否为 ZIP 存档
要检查指定文件是否为 ZIP 存档,可以使用的函数:
import zipfile # 文件名称 files = ['a.txt', 'b.zip'] # 检查文件是否为 ZIP 压缩文件 for f in files: print('{}: {}'.format(f, zipfile.is_zipfile(f)))
a.txt: False b.zip: True
查看 ZIP 存档内容信息
要查看 ZIP 存档中包含哪些文件,打开 ZIP 存档后,使用 () 函数获取文件名列表:
import zipfile # 查看 ZIP 压缩文件内容信息 with zipfile.ZipFile('archive.zip', 'r') as zf: print(zf.namelist())
['build.sh', 'mount_s3.sh']
文件名只是ZIP压缩包中的一条信息怎么用360解压压缩文件,其他更详细的信息可以通过()和()获取。
() 可以通过文件名获取对象,详见:
import zipfile import datetime # 查看 ZIP 压缩文件内容信息 with zipfile.ZipFile('archive.zip', 'r') as zf: # # 以文件名称取得 ZipInfo 物件 info = zf.getinfo('build.sh') print(info) # ZipInfo 物件各项信息 print('文件名称:', info.filename) print('修改时间:', datetime.datetime(*info.date_time)) print('压缩方式:', info.compress_type) print('未压缩大小:', info.file_size, 'bytes') print('压缩后大小:', info.compress_size, 'bytes')
文件名称: build.sh 修改时间: 2022-02-22 11:24:16 压缩方式: 8 未压缩大小: 885 bytes 压缩后大小: 488 bytes
() 是可用于获取所有文件的对象列表:
import zipfile # 查看 ZIP 压缩文件内容信息 with zipfile.ZipFile('archive.zip', 'r') as zf: # 透过 InfoInfo 物件查看 ZIP 文件内容 for info in zf.infolist(): print(info)
创建 ZIP 存档
要创建 ZIP 存档,可以先创建对象,然后使用 write() 添加要压缩的文件:
import zipfile # 建立 ZIP 压缩文件 with zipfile.ZipFile('new_archive.zip', mode='w') as zf: # 加入要压缩的文件 zf.write("a.txt") zf.write("b.txt")
要指定压缩方式,可以添加参数:
import zipfile # 建立 ZIP 压缩文件,以 DEFLATED 方式压缩 with zipfile.ZipFile('new_archive.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zf: # 加入要压缩的文件 zf.write("a.txt") zf.write("b.txt")
直接写入数据
要将程序中的数据直接写入 ZIP 存档,您可以改用 () 函数,这是一个简单的示例:
import zipfile # 要压缩的数据 my_data = "Hello, World." # 建立 ZIP 压缩文件 with zipfile.ZipFile('new_archive.zip', mode='w') as zf: # 加入要压缩的数据 zf.writestr("data.txt", my_data)
在上面的示例中,我们在 ZIP 存档中创建了一个新文件 data.txt怎么用360解压压缩文件,并将变量中的数据写入其中。
追加新文件
如果要将新文件添加到现有 ZIP 存档中,可以通过将 mode 参数设置为 ‘a’ 以追加模式添加新文件:
解压缩 ZIP 文件
要解压文件,可以使用 () 函数:
import zipfile # 打开 ZIP 压缩文件 with zipfile.ZipFile('archive.zip', 'r') as zf: # 列出每个文件 for name in zf.namelist(): # 解压缩指定文件至 /my/folder 目录 zf.extract(name, path='/my/folder')
这里的path参数可以指定解压文件要放置的位置。如果不指定放置路径,则默认放置在当前目录下。
我们还可以使用 () 函数将所有文件一次解压到指定位置:
import zipfile # 打开 ZIP 压缩文件 with zipfile.ZipFile('archive.zip', 'r') as zf: # 解压缩所有文件至 /my/folder 目录 zf.extractall(path='/my/folder')
CRC校验码
在ZIP压缩文件中,每个文件都有一组CRC校验码,可以用来确认每个文件的完整性以及文件是否损坏。我们可以使用()函数对ZIP文件中每个文件的CRC校验码进行校验,如果文件的CRC校验码有问题,该函数会返回找到的第一个有问题的文件名,并返回如果一切正常,则无。这是一个简单的例子:
import zipfile # 打开 ZIP 压缩文件 with zipfile.ZipFile('broken_data.zip', 'r') as zf: # 确认 CRC 检查码 crc_result = zf.testzip() # 输出第一个错误的文件名称 if crc_result: print(crc_result)
异常处理
如果遇到损坏的 ZIP 压缩包,解压时会抛出异常,以下是异常处理示例:
import zipfile # 打开 ZIP 压缩文件 with zipfile.ZipFile('broken_data.zip', 'r') as zf: # 解压缩 try: zf.extractall() except zipfile.BadZipfile as e: print("ZIP 文件错误:", e)
ZIP 文件错误: Bad CRC-32 for file 'build.sh'
暂无评论内容