python文档压缩与解压——zipfile

zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍一下:

创建一个ZipFile对象

class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])    #表示一个zip文件

参数file: 表示文件的路径或类文件对象(file-like object);

参数mode:指示打开zip文件的模式,默认值为'r',表示读已经存在的zip文件,也可以为'w'或'a','w'表示新建一个zip文档或覆盖一个已经存在的zip文档,'a'表示将数据附加到一个现存的zip文档中。

参数compression:表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。ZIP_STORE是默认的,表示不压缩;ZIP_DEFLATED表示压缩

参数allowZip64如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。

ZipFile对象常用的方法和属性:

ZipFile.getinfo(name)::获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。

ZipFile.infolist():获取zip文档内所有文件的信息,返回一个zipfile.ZipInfo的列表。

ZipFile.namelist():获取zip文档内所有文件的名称列表。

ZipFile.extract(member[, path[, pwd]]):将zip文档内的指定文件解压到当前目录。

        参数member:指定要解压的文件名称或对应的ZipInfo对象;(需要解压缩的文件名儿列表)

        参数path指定了解析文件保存的文件夹;

        参数pwd为解压密码。

ZipFile.printdir():将zip文档内的信息打印到控制台上。

ZipFile.setpassword(pwd):设置zip文档的密码。

ZipFile.read(name[, pwd]):获取zip文档内指定文件的二进制数据。

zipfile.write(filename[, arcname[, compress_type]]):将文件写到压缩包中

         filename为文件路径,

         arcname为添加到zip文档之后保存的名称;未指定将按 filename进行压缩;

         参数compress_type表示压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED

Class ZipInfo

ZipFile.getinfo(name) 方法返回的是一个ZipInfo对象,表示zip文档中相应文件的信息。它支持如下属性:

  • ZipInfo.filename: 获取文件名称。
  • ZipInfo.date_time: 获取文件最后修改时间。返回一个包含6个元素的元组:(年, 月, 日, 时, 分, 秒)
  • ZipInfo.compress_type: 压缩类型。
  • ZipInfo.comment: 文档说明。
  • ZipInfo.extr: 扩展项数据。
  • ZipInfo.create_system: 获取创建该zip文档的系统。
  • ZipInfo.create_version: 获取 创建zip文档的PKZIP版本。
  • ZipInfo.extract_version: 获取 解压zip文档所需的PKZIP版本。
  • ZipInfo.reserved: 预留字段,当前实现总是返回0。
  • ZipInfo.flag_bits: zip标志位。
  • ZipInfo.volume: 文件头的卷标。
  • ZipInfo.internal_attr: 内部属性。
  • ZipInfo.external_attr: 外部属性。
  • ZipInfo.header_offset: 文件头偏移位。
  • ZipInfo.CRC: 未压缩文件的CRC-32。
  • ZipInfo.compress_size: 获取压缩后的大小。
  • ZipInfo.file_size: 获取未压缩的文件大小。

案例

文档夹压缩

f = zipfile.ZipFile('sss_db.zip', 'w', zipfile.ZIP_DEFLATED)
for dirpath, dirnames, filenames in os.walk(file):
    save_path = os.path.relpath(dirpath, file)   #获取以压缩文件夹开始的相对路径
    for filename in filenames:
        f.write(os.path.join(dirpath, filename), os.path.join(save_path, filename)) f.close()

文档解压

#解压zip格式文件
file = 'sss_db.zip'
zip_file = zipfile.ZipFile(os.path.join(path, file))
for names in zip_file.namelist():
    zip_file.extract(names, path)
zip_file.close()

 

你可能感兴趣的:(python,压缩,解压,zipfile)