python:使用zipfile操作ZIP文件

liftword4个月前 (03-03)技术文章35
import zipfile
import os
#  使用zipfile操作ZIP文件
#  创建和添加文件到 ZIP 文件、读取 ZIP 文件、从 ZIP 文件中解压缩、文件夹备份到 ZIP 文件

def createZipFile():
    print("================创建和添加到 ZIP 文件==================")
    zipFile = zipfile.ZipFile('test.zip', 'w')
    #  write()
    #  第一个参数是一个字符串,代表要添加的文件名。
    #  第二个参数是压缩类型,指定压缩算法。
    #  可以总是将这个值设置为 zipfile.ZIP_DEFLATED(deflate 压缩算法,对各种类型的数据都很有效)。
    zipFile.write('spam001.txt', compress_type=zipfile.ZIP_DEFLATED)
    zipFile.write('spam003.txt', compress_type=zipfile.ZIP_DEFLATED)
    zipFile.write('spam007.txt', compress_type=zipfile.ZIP_DEFLATED)
    zipFile.close()


def readZipFileInfo():
    print("================读取 ZIP 文件==================")
    zipFile = zipfile.ZipFile("test.zip", 'r')
    print(zipFile.namelist())
    fileInfo = zipFile.getinfo('spam003.txt')
    print(fileInfo)
    print(fileInfo.file_size)
    print(fileInfo.compress_size)
    zipFile.close()


def unZipFile():
    print("================从 ZIP 文件中解压缩==================")
    file = zipfile.ZipFile("test.zip")
    file.extractall()  # 解压到当前工作目录
    # file.extractall('./')  # 解压到指定目录
    # file.extract('spam001.txt')  # 解压单个文件到当前工作目录
    # file.extract('spam003.txt', './')  # 解压单个文件到指定目录
    file.close()


def delTxtFile():
    # 删除文件
    for rfile in os.listdir('./'):
        if rfile.endswith('.txt'):
            os.remove(rfile)


def doDocZip(path):
		# 为整个文件夹创建一个 ZIP 文件,作为“快照”。
		# 你希望保存不同的版本,希望 ZIP 文件的文件名每次创建时都有所变化。
		# 例如 AlsPythonBook_1.zip、AlsPythonBook_2.zip、AlsPythonBook_3.zip,等等

    # 确保为绝对路径
    path = os.path.abspath(path)
    basename = os.path.basename(path)

    num = 1
    while True:
        # 用要压缩的目录名加序号作为备份的zip文件名
        zipFileName = basename + "_" + str(num) + ".zip"
        if os.path.exists("./file/" + zipFileName):
            num += 1
        else:
            break

    # 创建备份zip文件
    print('Creating %s...' % zipFileName)
    backZip = zipfile.ZipFile("./file/" + zipFileName, 'w')

    # 遍历需要备份的目录,写入zip文件
    for folderName, subFolders, fileNames in os.walk(path):
        # folderName:当前目录名称的字符串
        if len(os.listdir(folderName)) >= 1:  # 空目录不压缩
            print('Adding files in %s...' % folderName)
            backZip.write(folderName, folderName)

        # 当前目录中文件名称的字符串列表
        for filename in fileNames:
            if filename.startswith(basename) and filename.endswith(".zip"):
                continue
            else:
                backZip.write(os.path.join(folderName, filename), compress_type=zipfile.ZIP_DEFLATED)

    backZip.close()
    print('Done.')

相关文章

最全RAR文件操作指南:如何用Python压缩、解压与筛选文件

引言:Python 对 .rar 文件进行压缩、解压以及筛选特定文件的操作代码封装一下import os import rarfile #todo 用于处理 RAR 文件 import zipfil...

使用 Python 压缩 PDF 或减小 PDF 文件大小的 5 种方法

在存储、共享和传输方面,处理大型 PDF 文件可能是一个真正的挑战。PDF 压缩提供了一种有效的解决方案来减小文件大小,使文档更易于管理并优化存储使用情况。压缩的 PDF 文件具有几个关键优势:降低存...

使用 Python 在 Excel 中插入、压缩、替换、提取和删除图像

Excel 不仅仅是一个数字和公式的工具;它还提供了用于处理图像的强大功能。无论您是创建报告、演示文稿还是数据可视化,合并图像都可以大大提高 Excel 项目的整体影响力和专业性。在 Excel 中...

用 Python 库 PySimpleGUI 制作自动化办公小软件

来源丨Python自动化办公社区链接https://blog.csdn.net/lys_828/article/details/11123856Python 在运维和办公自动化中扮演着重要的角色,P...

python散装笔记——133: 开始使用GZip

本章介绍了如何使用Python的gzip模块来处理GZip格式的压缩文件。gzip模块提供了一个简单的接口,用于压缩和解压缩文件,类似于GNU程序gzip和gunzip的功能。数据压缩由zlib模块提...

在终端执行 Python 代码的 6 种方式!

你还在用 IDE 或者 python hello.py 这种方式运行 Python 代码吗?作为一位资深的Python使用者,今天就来带你解锁一些你可能不知道的 Python 代码运行方式,尤其是在服...