导读:本期聚焦于小伙伴创作的《Python怎么压缩文件夹?zipfile实现多目录结构自动递归打包与解压备份》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python怎么压缩文件夹?zipfile实现多目录结构自动递归打包与解压备份》有用,将其分享出去将是对创作者最好的鼓励。

在Python开发中,处理文件夹的压缩和解压是常见需求,尤其是需要备份多层级目录内容时,保留原有目录结构是关键。zipfile作为Python标准库的一部分,提供了完整的zip文件读写能力,无需安装第三方依赖就能完成相关操作。

Python怎么压缩文件夹?zipfile实现多目录结构自动递归打包与解压备份

zipfile模块基础介绍

zipfile模块主要用于处理zip格式的压缩文件,支持创建、读取、写入和解压zip包。核心类包括ZipFileZipInfo,前者用于操作整个zip文件,后者用于存储单个文件或目录的元数据信息。

常用核心方法

  • ZipFile(file, mode):创建ZipFile对象,mode为w时表示写入模式,r时表示读取模式
  • write(filename, arcname):将指定文件写入zip包,arcname可设置文件在zip包中的路径
  • extractall(path):将zip包中的所有内容解压到指定路径
  • namelist():返回zip包中所有文件/目录的名称列表

递归打包多目录文件夹

要实现保留目录结构的文件夹压缩,核心是遍历目标文件夹下的所有文件和子目录,将每个文件的相对路径作为arcname写入zip包。递归遍历可以使用os.walk方法实现,它会自动遍历所有层级的子目录。

完整打包实现代码

import os
import zipfile

def zip_folder(source_dir, output_zip):
    """
    递归压缩文件夹,保留原有目录结构
    :param source_dir: 待压缩的源文件夹路径
    :param output_zip: 输出的zip文件路径
    """
    # 获取源文件夹的绝对路径,避免路径拼接问题
    source_dir = os.path.abspath(source_dir)
    with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
        # 遍历源文件夹下所有目录和文件
        for root, dirs, files in os.walk(source_dir):
            # 处理当前目录下的所有文件
            for file in files:
                file_path = os.path.join(root, file)
                # 计算文件在zip包中的相对路径,保留目录结构
                arcname = os.path.relpath(file_path, start=os.path.dirname(source_dir))
                zipf.write(file_path, arcname)
    print(f"文件夹压缩完成,输出路径:{output_zip}")

# 使用示例
if __name__ == '__main__':
    # 待压缩的文件夹路径
    target_dir = './test_data'
    # 输出的zip文件路径
    zip_path = './backup.zip'
    zip_folder(target_dir, zip_path)

上述代码中,os.walk会逐层遍历source_dir下的所有内容,os.path.relpath用于计算文件相对于源文件夹父目录的路径,确保压缩后的zip包内目录结构和原文件夹完全一致。zipfile.ZIP_DEFLATED表示使用deflate压缩算法,能有效减小压缩包体积。

解压zip包还原目录结构

解压操作相对简单,zipfile的extractall方法会自动还原zip包内的所有目录和文件结构,不需要额外处理递归逻辑。

完整解压实现代码

import zipfile
import os

def unzip_file(zip_path, extract_dir):
    """
    解压zip包到指定目录,自动还原目录结构
    :param zip_path: 待解压的zip文件路径
    :param extract_dir: 解压目标目录路径
    """
    # 确保目标目录存在,不存在则自动创建
    os.makedirs(extract_dir, exist_ok=True)
    with zipfile.ZipFile(zip_path, 'r') as zipf:
        # 解压所有内容到目标目录
        zipf.extractall(extract_dir)
    print(f"解压完成,文件已还原到:{extract_dir}")

# 使用示例
if __name__ == '__main__':
    # 待解压的zip文件路径
    zip_file = './backup.zip'
    # 解压目标目录
    extract_target = './restored_data'
    unzip_file(zip_file, extract_target)

使用extractall方法时,zip包内的所有目录层级会被自动创建,文件会被放到对应的目录位置,完全还原打包前的目录结构。如果需要单独解压某个文件,可以使用extract方法,传入文件名和目标路径即可。

操作注意事项

  • 打包时如果源文件夹路径包含中文,需要确保Python环境编码正常,避免路径乱码导致文件写入失败
  • 解压zip包前建议先检查目标目录是否存在,避免覆盖已有重要文件,可先创建临时目录再解压
  • 如果要处理超大文件,建议分批次写入zip包,避免一次性占用过多内存
  • 部分zip包可能带有密码,zipfile模块对加密zip的支持有限,复杂加密场景建议使用第三方库如pyzipper

zipfile模块是Python处理zip文件的首选方案,内置在标准库中,兼容性好,性能稳定,能满足大部分日常文件夹压缩和解压备份的需求。

Pythonzipfile递归打包解压备份多目录结构修改时间:2026-06-23 09:15:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。