admin 管理员组

文章数量: 1184232

ZipFile对象

顾名思义, zipfile 是处理 zip 文件的模块,其中最重要的类是 ZipFile ,其构造函数为

ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None,*, strict_timestamps=True)

各参数含义如下

  • file 文件路径或者文件对象
  • mode 文件打开模式,可以为 r, w, a, x ,表示读、写、追加、新建写入。
  • compression 压缩方案,可以是 ZIP_STORED , ZIP_DEFLATED , ZIP_BZIP2 ZIP_LZMA
  • allowZip64 True 时,若文件大于4GiB, zipfile 将创建使用 ZIP64 扩展的 ZIP 文件;为 False 则引发异常。
  • compresslevel 为压缩等级,在 ZIP_DEFLATED 时可选整数 0-9 ,在 ZIP_BZIP2 时可选整数 1-9 ,其他压缩方案不可用。
  • strict_timestamps 设为 False 时允许压缩早于1980年以前活2108年之后的文件,但时间戳会设为1980-01-01或 2107-12-31

写入压缩文件

下面对读写 zip 数据做一个简单的示例

import zipfile, os
test ="if you miss the train i'm on"*500with zipfile.ZipFile('test.zip','w')as z:
    z.writestr("test.txt", test)

效果如下

其中, z.writestr("test.txt", test) 表示将 test 写入 test.txt 后,在存档到压缩文件 z 中。

读取和解压缩

能写就能读,下面来演示一下 Zipfile.read 的功能

z = zipfile.ZipFile('test.zip','r')
z.namelist()# 读取压缩文件中的文件列表# ['test.txt']
z.read('test.txt')# 读取`test.txt`中的内容# if you miss the train i'm onif you miss the train...

通过 printdir 可以查看压缩文件中更加详细的文件信息。

>>> z.printdir()
File Name     Modified                  Size
test.txt      2023-01-1912:32:1214000

一般来说,通过代码来读写压缩文件是程序员的事儿,程序员要做的往往是给用户提供一个按钮,按下这个按钮可以实现压缩和解压缩。在 ZipFile 中, extract extract 可以便捷地将压缩包里面的文件解压到指定位置,下面代码将 z 中所有的文件解压到 test 文件夹中,如果 test 文件夹不存在,则创建。

z.extractall('test')

常用属性

ZipFile 封装的属性和没有参数的常用方法如下

  • filename ZIP 文件的名称
  • debug 要使用的调试输出等级,可设0(默认无输出)到3(最多输出)
  • comment 关联到ZIP文件的字节对象形式的说明
  • close() 关闭归档文件,在退出程序之前必须调用,否则数据不会被写入。
  • namelist() 返回按名称排序的归档成员列表
  • infolist() 返回每个归档成员的 ZipInfo 对象
  • printdir() 打印归档的目录表
  • testzip() 读取归档中的所有文件并检查它们的 CRC 和文件头。 返回第一个已损坏文件的名称,在其他情况下则返回 None。

ZipInfo

通过 ZipFile.getinfo(name) 返回的是一个ZipInfo对象,如果 name 为空,则返回压缩包中所有文件的信息列表。 ZipInfo 对象支持如下属性:

属性 说明 属性 说明
filename 文件名称 compress_type 压缩类型
date_time 文件最后修改时间
comment 文档说明 extr 扩展项数据
create_system 创建该zip的系统
create_version 创建时的PKZIP版本 extract_version 解压所需PKZIP版本
reserved 预留字段,返回0
flag_bits zip标志位 CRC 未压缩文件的CRC-32
volume 文件头的卷标 header_offset 文件头偏移位。
internal_attr 内部属性 external_attr 外部属性
compress_size 压缩后大小 file_size 未压缩时大小

其中 date_time 的返回值是一个6元组,内容为:年月日时分秒,例如

>>> info = z.infolist()[0]>>> info.date_time
(2023,1,19,12,32,12)

本文标签: 文件 时可选整 系统