前言:
在最近的后台开发工作中,需要将服务器的指定文件夹压缩,然后传输到前台。shell的zip命令可以很方便的实现该需求,python也有对应的模块,这里简要记录一下使用两种方式压缩文件的方法。
shell命令压缩
def zip_file(dir_path, out_path):
# 先切换到要压缩的的文件目录下,然后再压缩文件,防止压缩的文件出现深层次的文件目录
zip_shell = """
#!/bin/bash
cd {dir_path} && zip -r {out_path} *
"""
try:
result = os.popen(zip_shell.format(out_path=out_path, dir_path=dir_path)).read()
if result.lower().find("zip error") != -1: # 表示出错
logger.error(result)
return None
else:
return out_path
except Exception as e:
logger.error(u"压缩文件失败:{}".format(e.message))
logger.error(traceback.format_exc())
return None
python的zipfile模块压缩
def zip_dir(dir_path, out_path):
"""
:brief 将目标文件夹压缩为zip格式
:param dir_path: 目标文件夹路径
:param out_path: 压缩文件路径(xxx.zip)
:return: 压缩文件路径
"""
try:
zip_obj = zipfile.ZipFile(out_path, "w", zipfile.ZIP_DEFLATED)
for path, dir_names, file_names in os.walk(dir_path):
# 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
fpath = path.replace(dir_path, '')
for filename in file_names:
zip_obj.write(os.path.join(path, filename), os.path.join(fpath, filename))
zip_obj.close()
return out_path
except Exception as e:
logger.error(u"压缩文件失败:{}".format(e.message))
logger.error(traceback.format_exc())
return None