首页 > 编程语言 >Python使用zipfile模块压缩目录(包含空目录)、压缩文件、解压文件

Python使用zipfile模块压缩目录(包含空目录)、压缩文件、解压文件

时间:2022-11-14 16:24:18浏览次数:43  
标签:zipFilePath Python archivePath zipfile 压缩文件 空目录 srcPath path os

主要功能:压缩目录、压缩文件、解压文件

import os
import zipfile

# 压缩目录、或文件
def zip(srcPath=None, zipFilePath=None, includeDirInZip=True):
    if not zipFilePath:
        zipFilePath = srcPath + ".zip"
    parentDir, dirToZip = os.path.split(srcPath) 
    
    # zipfile.write的第2个参数需要为相对路径,所以需要转换
    def trimPath(path):
        # 获取目录名称,前面带有\
        archivePath = path.replace(parentDir, "", 1)
        if parentDir:
            # 去掉第一个字符
            archivePath = archivePath.replace(os.path.sep, "", 1)
        if not includeDirInZip:
            archivePath = archivePath.replace(dirToZip + os.path.sep, "", 1)     
        return archivePath

    outFile = zipfile.ZipFile(zipFilePath, "w", compression=zipfile.ZIP_DEFLATED)

    if os.path.isdir(srcPath):
        # 目录的压缩包
        for (archiveDirPath, dirNames, fileNames) in os.walk(srcPath):           
            for fileName in fileNames:
                filePath = os.path.join(archiveDirPath, fileName)
                # write的第2个参数需要为相对路径
                outFile.write(filePath, trimPath(filePath))
            # 包含空目录
            if not fileNames and not dirNames:
                zipInfo = zipfile.ZipInfo(trimPath(archiveDirPath) + "/")          
                outFile.writestr(zipInfo, "")
    else:
        # 文件的压缩包
        outFile.write(srcPath, trimPath(srcPath))
    outFile.close()


# 解压文件
def unzip(zipFilePath, savePath=None):
    r = zipfile.is_zipfile(zipFilePath)
    if r:        
        if not savePath:
            savePath = os.path.split(zipFilePath)[0]
        fz = zipfile.ZipFile(zipFilePath, 'r')
        for file in fz.namelist():
            fz.extract(file, savePath)
    else:
        print('不是一个zip文件')


if __name__ == '__main__':
    zip(r"D:\testZip")
    unzip(r'D:\testZip.zip')

压缩目录代码来自:https://www.cnblogs.com/staff/p/16290689.html,除此之外,增加了压缩文件,解压文件。

标签:zipFilePath,Python,archivePath,zipfile,压缩文件,空目录,srcPath,path,os
From: https://www.cnblogs.com/gdjlc/p/16889370.html

相关文章

  • 06python序列
    数据结构是Python中一个很重要的概念,是以某种方式(如通过编号)组合起来的数据元素(如数字、字符乃至其他数据结构)的集合。在Python中,最基本的数据结构是序列(sequence)。......
  • 【Python基础】快速入门Python(讲解、习题)
    0.导语Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于......
  • Python用yield form 实现异步协程爬虫
    很古老的用法了,现在大多用的aiohttp库实现,这篇记录仅仅用做个人的协程底层实现的学习。争取用看得懂的字来描述问题。1.什么是yield如果还没有怎么用过的话,直接把yield......
  • python 双曲线 双坐标 上下X坐标轴 左右Y坐标轴
    raw=[52.34,52.85,52.61,52.77,52.27,53.13,53.24,52.98,52.36,53.57,52.91,53.21,52.25,52.24,50.83,50.63,49.93,47.62,48.52,48.4,48.0,47.62,......
  • python-docx操作word文档
    python-docx神器操作word文档1安装pip来安装:$pipinstallpython-docx2简单使用fromdocximportDocument#创建word文档document=Document()#添加段落......
  • Python -二叉树 创建与遍历算法(很详细)
    树表示由边连接的节点。它是一个非线性的数据结构。它具有以下特性。一个节点被标记为根节点。除根节点之外的每个节点都与一个父节点关联。每个节点可以有一个arbiatry编号......
  • 用C语言为python写C扩展
    calc.c#include<stdio.h>#include<Python.h>intadd(intx,inty){//C函数returnx+y;}staticPyObject*calc_add(PyObject*self,PyObject*args){......
  • python-时间模块-3大常见时间处理模块-datatime(八)
    1.datatime模块datetime是python中处理日期时间的标准库,datetime模块中常用的类包括date,time,datetime,timedelta,使用这些对象支持日期时间的数学运算和更有效的解析......
  • Python 代码托管到码云平台,原来这么简单!!
    一、什么是代码托管?代码托管又有什么好处?场景1:我有2个电脑,公司一台,家里一台。我想在两台电脑上都进行同步开发。这时候我只要gitpush/pull一下就能够同步了,不再需要用U......
  • Python 自动化中三种等待时间的详解
    自动化测试,是交由机器来执行的一种测试手段,用于提升测试效率,意味着每一次的自动化测试都需要有非常高的成功率,才可以达到提升效率的作用。在自动化测试中,其实就是通过代码......