Python学习:解压zip包

解压代码

根据文章python解压压缩包的几种方法
中zip解压的代码,改装的。

  • 添加了random目录,生成解压文件编号,确保判断文件不重名。
  • 添加了try异常处理。
  • 利用了函数的递归,函数内部调用函数。
  • 利用main函数,调用函数,确保模块被调用时候,不执行。
# 导入zipfile和os模块,random模块为了生成随机数
# 来合成解压后文件的名字
import zipfile
import os
import random

# 定义un_zip函数,传入参数file_name,就是zip包所在的路径
def un_zip(file_name):
    """unzip zip file"""
    # 生成0到1000的随机数,包含0和1000
    num_random=str(random.randint(0,1000))
    # 解压文件,创建一个zip_file对象
    zip_file = zipfile.ZipFile(file_name)

    # try保证如果文件名包含[0,1000]的标号,就报错,提示查看。
    # 比较好的方式验证,是将写入num_random=str(random.randint(0,1)),两次调用之后,就会显示文件名重复。

    try:
        # if 判断如果文件名存在,就继续调用函数,重新生成num_random合成文件名
        #os.path.isdir判断是否存在
        if os.path.isdir(file_name + "_files_"+num_random):
            un_zip(file_name)
        # 如果不存在file_name_files_random的文件就创建该文件
        else:
        	# os.mkdir创建文件,其实可以省略这一步骤,下一步提取时再创建
            os.mkdir(file_name + "_files_"+num_random)
        # namelist()获取zip文档内所有文件的名称列表。
        for names in zip_file.namelist():
        	# 将zip文档内的指定文件解压到当前目录
            zip_file.extract(names,"_files_"+num_random)

    except Exception as result:
        print("文件名重复,报错:\n%s\n请查看文件是否已解压"%result)


# 调用函数,传入参数
if __name__ == '__main__':
    un_zip("D:\\pythonProject\\ICA_unittest\\result\\a4ccf95f50ca47ae95fecb52c6594eb0.zip")

zipfile模块简介

参照文章python3中zipfile模块的常用方法

1、class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])

zip_file = zipfile.ZipFile(file_name)

创建一个zip_file对象,表示一个zip文件。参数file_name表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,

默认值为’r’,表示读已经存在的zip文件,也可以为’w’或’a’,'w’表示新建一个zip文档或覆盖一个已经存在的zip文档,

2、ZipFile还提供了如下常用的方法和属性:

  • ZipFile.namelist()

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

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

将zip文档内的指定文件解压到当前目录。参数member指定要解压的文件名称或对应的ZipInfo对象;参数path指定了解析文件保存的文件夹;

参数pwd为解压密码。