@staticmethod
def zip_dir(tar_dir_name, zip_file_name):
"""
函数目的: 压缩指定目录为zip文件
使用DEMO: FileOperateUtil.zip_dir("C:/tmp/", "E:/test.zip")
:param tar_dir_name: 待压缩的目录
:param zip_file_name: 压缩后的zip文件路径 eg:C:/tmp/test.zip
:return: boolean ,True-成功,False-失败
"""
file_list = []
ret = False
try:
# 判断是否为文件
if os.path.isfile(tar_dir_name):
file_list.append(tar_dir_name)
else:
# 循环目录,读取文件列表
for root, dirs, files in os.walk(tar_dir_name):
for name in files:
file_list.append(os.path.join(root, name))
# 创建ZIP文件操作对象
zf = zipfile.ZipFile(zip_file_name, "w", zipfile.zlib.DEFLATED)
try:
for tar in file_list:
arc_name = tar[len(tar_dir_name):]
zf.write(tar, arc_name)
ret = True
except Exception as e:
log.debug("压缩文件发送异常,%s" % e)
raise Exception("压缩文件发送异常")
finally:
zf.close()
except Exception as e:
log.debug("---- 压缩文件发生异常,%s --" % e)
ret = False
return ret
@staticmethod
def unzip_file(zip_file_name, unzip_dir_path):
"""
解压zip文件到指定目录
使用DEMO:FileOperateUtil.unzip_file("C:/tmp/test.zip", "c:/tmp/zip/")
:param zip_file_name: 为zip文件路径,
:param unzip_dir_path: 为解压文件后的文件目录
:return : boolean
"""
# 判断目标文件目录是否存在,不存在就创建
if not os.path.exists(unzip_dir_path):
os.mkdir(unzip_dir_path)
# 创建zip操作对象
zf_obj = zipfile.ZipFile(zip_file_name)
try:
for name in zf_obj.namelist():
name = name.replace('\\', '/')
if name.endswith('/'):
p = os.path.join(unzip_dir_path, name[:-1])
if os.path.exists(p):
# 如果文件夹存在,就删除之:避免有新更新无法复制[递归删除]
shutil.rmtree(p)
os.mkdir(p)
else:
ext_filename = os.path.join(unzip_dir_path, name)
ext_dir = os.path.dirname(ext_filename)
if not os.path.exists(ext_dir):
os.mkdir(ext_dir)
outfile = open(ext_filename, 'wb')
try:
outfile.write(zf_obj.read(name))
except Exception as e:
log.debug("写文件发生异常 %s" % e)
raise Exception("解压文件发生异常")
finally:
outfile.close()
except Exception as e:
log.debug("解压文件发生异常 %s" % e)
raise Exception(e)
shutil.rmtree(unzip_dir_path)
return True |