Python 基础 之 zipfile 文件夹压缩/解压方法的简单整理

Python 基础 之 zipfile 文件夹压缩/解压方法的简单整理

目录

Python 基础 之 zipfile 文件夹压缩/解压方法的简单整理

一、简单介绍

二、zipfile 压缩

三、zipfile 进行简单压缩包解压


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里介绍使用 zipfile 进行文件夹的压缩,并且zipfile 进行解压压缩包,这里简单介绍,方法不唯一,如果不足或更好的方法,还请留言补充。

zipfile 常用函数

0)ZipFile.ZipFile(file[, mode[, compression[, allowZip64]]])

功能:创建一个ZipFile对象,表示一个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文件大小超过2G,应该将allowZip64设置为True。

1)ZipFile.getinfo(name)

功能:获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。将在下面 具体介绍该对象。


2)ZipFile.infolist()

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

3)ZipFile.namelist()

功能:获取zip文档内所有文件的名称列表。


4)ZipFile.extractall(member[, path[, pwd]])

功能:将zip文档内的指定文件解压到当前目录。

参数:

  •     member 指定要解压的文件名称或对应的ZipInfo对象
  •     path 指定解析文件保存的文件夹
  •     pwd         解压密码
from zipfile import ZipFile, BadZipfile
 
with ZipFile(zip_path, "r") as archive:
    try:
        archive.extractall(path=extract_path, pwd=password)
    except BadZipfile:
        print("Invalid Zip file")

5)ZipFile.extract(member[, path[, pwd]])

功能:将zip文档内的指定文件解压到当前目录。

参数:

  •         member      指定要解压的文件名称或对应的ZipInfo对象
  •         path        指定解析文件保存的文件夹
  •         pwd         解压密码
     
import zipfile, os
 
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
for file in zipFile.namelist():
    zipFile.extract(file, r'd:/Work')
zipFile.close()

6)ZipFile.printdir()

功能:将zip文档内的信息打印到控制台上。

7)ZipFile.setpassword(pwd)

功能:设置zip文档的密码。

8)ZipFile.read(name[, pwd])

功能:获取zip文档内指定文件的二进制数据。

9)ZipFile.write(filename[, arcname[, compress_type]])

功能:将指定文件添加到zip文档中。

参数:

        filename      文件路径
        arcname       添加到zip文档之后保存的名称
        compress_type 压缩方法,它的值可以是zipfile.ZIP_STORED 或zipfile.ZIP_DEFLATED

10)ZipFile.writestr(zinfo_or_arcname, bytes)

功能:writestr()支持将二进制数据直接写入到压缩文档。


11)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_versio  获取、解压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       获取未压缩的文件大小
     

二、zipfile 压缩

1、压缩文件夹

import os
import zipfile

def zipDir(source_dir, output_filename):
    """
    压缩指定文件夹
    :param source_dir: 目标文件夹路径
    :param output_filename: 压缩文件保存路径+xxxx.zip
    :return: 无
    """
    if os.path.exists(source_dir):
        # compression压缩比例,默认是不压缩,ZIP_LZMA=14级别的压缩,影响的是时间,但是包能更小
        # vue使用级别=9的,var archive = archiver('zip', {zlib: {level: 9}});
        # mac install: brew install xz
        # mode 解压是 r , 压缩是 w 追加压缩是 a
        # compression 为  zipfile.ZIP_DEFLATED,zipfile.ZIP_STORED, zipfile.ZIP_LZMA
        zipf = zipfile.ZipFile(file=output_filename, mode='w', compression=zipfile.ZIP_LZMA)
        # zipf = zipfile.ZipFile(file=output_filename, mode='w', compression=zipfile.ZIP_DEFLATED)
        pre_len = len(os.path.dirname(source_dir))
        for parent, dirnames, filenames in os.walk(source_dir):
            for filename in filenames:
                pathfile = os.path.join(parent, filename)
                arcname = pathfile[pre_len:].strip(os.path.sep)  # 相对路径
                zipf.write(pathfile, arcname)
        zipf.close()
        return output_filename
    return


zipDir(
    r'E:\ssxx\T0xB0',
    r'E:\ssxx\T0xB0_level_14.zip')

2、压缩指定扩展名文件

def zip_file_by_extension(src_dir, extension='dll', save_name='default'):
    '''
    根据文件扩展名筛选需要压缩的文件到压缩包
    注:针对单层目录情况,文件夹下的子文件不会被压缩
    '''
    if save_name == 'default':
        zip_name = src_dir + '.zip'
    else:
        if save_name is None or save_name == '':
            zip_name = src_dir + '.zip'
        else:
            zip_name = save_name + '.zip'

    z = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
    file_list = os.listdir(src_dir)
    for filename in tqdm(file_list):
        if not os.path.isfile(os.path.join(src_dir, filename)):
            continue

        if filename.split('.')[-1] == extension:
            print(r'正在压缩文件:', filename, end='')
            z.write(os.path.join(src_dir, filename), filename)
    z.close()
    return True

三、zipfile 进行简单压缩包解压

1、解压压缩包


def unzip_file(zip_src, dst_dir):
    '''
    解压缩
    '''
    r = zipfile.is_zipfile(zip_src)
    if r:
        fz = zipfile.ZipFile(zip_src, 'r')
        for file in fz.namelist():
            fz.extract(file, dst_dir)
    else:
        print('This is not zip')
        return False
    return True

猜你喜欢

转载自blog.csdn.net/u014361280/article/details/126000651
今日推荐