[Python]_[初级]_[压缩和解压zip文件]

场景

  1. 我们在开发,测试,运维时,有时候需要手动压缩打包一些日志或者解压缩指定的ZIP文件进行分析。比如下载文件可以自动化,但是到解压的过程反而需要手动去解压缩,这个反复的工作会浪费大量的时间。所以我们如何使用Python进行解压缩文件?

说明

  1. Windows上是没有压缩和解压缩zip的命令的. 而Python自带的库zipfile可以解决这个问题,而且无需多少代码。

  2. ZipHelper.py既实现了解压缩整个zip或指定压缩文件里的某个文件,也实现了压缩某个目录到zip的功能. 我使用pyinstaller打包为单个EXE文件,方便使用, 当然也可以使用python ZipHelper.py来调用。pyinstallerpython 3.7的第三方模块,需要通过pip install pyinstaller安装。

pyinstaller -F --console ZipHelper.py

它的用法:

ZipHelper.exe --source 需要压缩的目录路径 --dest 输出的zip路径\n
ZipHelper.exe -unzip --source 需要解压缩的zip路径 --dest 解压到的输出目录路径
ZipHelper.exe -unzip --source 需要解压缩的zip路径 --insource zip内部路径(如word/document.xml) --dest 解压到的输出目录路径
  1. 我使用第三方模块click库来作为命令行参数解析库, 也是需要通过pip install click安装的。

  2. 使用动态语言python开发自动化脚本,不考虑性能的情况下还是比C/C++方便的。当然也可以使用它来代替复杂的shell脚本.

例子

ZipHelper.py

from zipfile import ZipFile
import click
import zipfile
import os

@click.command(help="""压缩和解压ZIP文件,默认是压缩,请是使用--help查看帮助\n
    ZipHelper --source 需要压缩的目录路径 --dest 输出的zip路径\n
    ZipHelper -unzip --source 需要解压缩的zip路径 --dest 解压到的输出目录路径""")
@click.option('-unzip',is_flag=True, help="解压") 
@click.option('--source',default="",help="zip内文件") 
@click.option('--insource',default="",help="zip内文件")
@click.option('--dest',default="",help="zip内文件")
@click.pass_context 
def runZipOrUnzip(ctx,unzip,source,insource,dest):
    print(" \n unzip: %s\n source: %s\n insource: %s\n dest %s\n" 
        % (unzip,source,insource,dest))

    if(len(source) == 0 or len(dest) == 0):
        return

    if(unzip):
        with ZipFile(source) as f:
            if(len(insource) == 0):
                f.extractall(path = dest)
            else:
                f.extract(path = dest,member =insource)
    else:
        with ZipFile(dest,'w',zipfile.ZIP_DEFLATED) as z:
            for dirpath, dirnames, filenames in os.walk(source):
                fpath = dirpath.replace(source,'')
                fpath = fpath and fpath + os.sep # + 优先级 > and
                for filename in filenames:
                    z.write(os.path.join(dirpath, filename),fpath+filename)
                    print ('==压缩成功==')
        pass
    pass

if __name__ == "__main__":
    print("Hello ZipHelper!")
    runZipOrUnzip(obj = {})
    print("Done ZipHelper!")
    
    pass

下载

  1. ZipHelper.exe放在AutomaticPython项目里, 可以下载Windows版本的压缩包.

参考

Python压缩解压zip文件

click project

python and or not

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白行微

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值