文章概述
解压代码
根据文章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模块简介
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为解压密码。