文件夹压缩成zip格式

2018-12-29  本文已影响0人  white_study
前言:

在最近的后台开发工作中,需要将服务器的指定文件夹压缩,然后传输到前台。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
上一篇 下一篇

猜你喜欢

热点阅读