python文档压缩与解压——zipfile

    技术2023-05-16  129

    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()

     

    Processed: 0.015, SQL: 9