Python CookBook之zipfile:一次性解压多层嵌套的压缩包

使用zipfile进行解压缩非常方便,这里不赘述zipfile模块的使用,使用方法自行百度。在做自动化测试的过程中,碰到一个问题,就是提供的zip包里的结构不是固定的,有可能只需要解压一次就完成了,有可能解压后里面还存在zip文件,需要继续进行解压缩,zipfile貌似不支持这样的操作,于是乎经过研究,找到了解决方案,一起来看下吧。

测试用的zip目录结构如下,日常应该没有这么多层的结构,仅为了展示效果:

test_zip.zip
    --1.zip
        --3.zip
            --4.zip
                --文件xxxx
            --文件xxxx
        --文件xxxx
    --2.zip
        --5.zip
            --文件xxxx
        --文件xxxx

解决思路是这样的,zipfile进行一次解压缩之后,会有新的目录产生,要继续遍历目录查看是否存在新的zip文件,于是乎想到了os.walk(),但os.walk()在遍历到只剩文件的时候就停止了,例如上面的例子,先将test_zip文件进行解压,然后os.walk()在获取到test_zip目录下只有1.zip和2.zip文件后,就终止循环了,那么就暴力一点吧,在os.walk()的外层添加while循环,然后找到合适的条件跳出循环即可,示例代码:

# -*- coding:utf-8 -*-
import zipfile
import os

path = r'D:\TestSamples\samples\extractfile\test_zip1.zip'
# zipfile模块解压一个zip包的基本代码,只需4行即可解压
# 先将目标zip文件进行一次解压,指定解压目录,类似winrar的解压到test_zip\功能
srcfile = zipfile.ZipFile(path)
desdir = path[:path.index('.zip')]
for filename in srcfile.namelist():
    srcfile.extract(filename, desdir)

while True:
    print '开始while循环'
    for root, dirs, files in os.walk(desdir):
        isEnd = True    # 判定是否还存在zip文件的标志位
        print root, dirs, files
        for subfile in files:
            if subfile.endswith('.zip'
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值