Python实现解压缩文件或文件夹的2种内置方法详解

0
(0)

前言

在日常的开发或数据处理工作中,文件和文件夹的压缩与解压操作是常见的需求。Python内置的zipfileshutil模块能高效完成这类任务。本文将详解这两种方法的具体使用方式,并提供完整的代码示例,帮助开发者快速上手。

python

压缩文件或文件夹

方法一:使用zipfile模块压缩文件夹

zipfile模块作为Python标准库的一部分,专门用于读写ZIP格式文件。它支持通过代码精准控制压缩路径和内容。

以下是使用该模块压缩文件夹的完整代码:

import os
import zipfile

def compress_folder_to_zip(folder_path, zip_path):
    with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                file_path = os.path.join(root, file)
                # 保留文件的相对路径
                arcname = os.path.relpath(file_path, folder_path)
                zipf.write(file_path, arcname)
    print(f"文件已压缩为:{zip_path}")

compress_folder_to_zip('path/to/folder', 'output.zip')

代码核心逻辑解析:

  1. os.walk函数递归遍历文件夹内所有文件路径
  2. os.path.relpath确保压缩后文件在ZIP目录中的相对路径与原始结构一致
  3. zipfile.ZIP_DEFLATED采用经典的压缩算法保证平衡的压缩率与速度

方法二:使用shutil模块快速压缩

当需要以更简洁的方式实现压缩时,shutil模块提供了更高层的封装。它支持ZIP、TAR等多种格式,且无需处理文件路径细节。

import shutil

def compress_with_shutil(folder_path, output_path, format='zip'):
    shutil.make_archive(output_path, format, folder_path)
    print(f"压缩完成:{output_path}.{format}")

compress_with_shutil('path/to/folder', 'output', 'zip')

核心特点:

  1. 无需手动管理文件递归
  2. 自动添加格式后缀,输入路径仅需基础名称
  3. 支持多种压缩格式(ZIP、GZIP、TAR等)

文件解压缩操作

通过zipfile解压ZIP文件

当需要精准控制解压过程时,可使用zipfile实现:

import zipfile

def extract_zip(zip_path, extract_to):
    with zipfile.ZipFile(zip_path, 'r') as zipf:
        zipf.extractall(extract_to)
    print(f"成功解压到:{extract_to}")

extract_zip('output.zip', 'path/to/extract')

该方法会完整保留原ZIP文件内的所有层级结构。

用shutil快速解压

对于通用格式解压需求,shutil提供了更简洁的方案:

import shutil

def extract_with_shutil(zip_path, extract_to):
    shutil.unpack_archive(zip_path, extract_to)
    print(f"解压完成:{extract_to}")

extract_with_shutil('output.zip', 'path/to/extract')

支持自动识别并解压ZIP、TAR等常见压缩包格式。

综合案例:完整压缩解压流程

以下是一个集成压缩与解压功能的完整脚本示例:

import os
import zipfile
import shutil

def compress_folder(folder_path, zip_path):
    with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                file_path = os.path.join(root, file)
                arcname = os.path.relpath(file_path, folder_path)
                zipf.write(file_path, arcname)
    print(f"压缩成功:{zip_path}")

def decompress_folder(zip_path, extract_to):
    with zipfile.ZipFile(zip_path, 'r') as zipf:
        zipf.extractall(extract_to)
    print(f"解压路径:{extract_to}")

if __name__ == "__main__":
    # 执行压缩
    compress_folder('source/folder', 'archive.zip')
    # 解压文件
    decompress_folder('archive.zip', 'target/location')

此脚本完整演示了从文件夹压缩到解压的完整流程,可通过修改参数路径直接运行。

场景选择与性能对比

需求类型 推荐方案 适用场景
需要路径控制时 zipfile模块 多级目录结构保存、特殊文件处理等复杂场景
追求开发效率时 shutil模块 快速压缩日志归档、临时文件处理等常规操作

两种方案各有优势,开发者可根据具体需求选择:当需要细粒度控制时优先采用zipfile模块,常规场景可直接使用shutil快速完成操作。

总结

本文对Python实现文件压缩解压的两种主流方法进行了详细对比与演示,通过代码示例说明了不同场景下的选择策略。开发者可结合具体需求选择方案,例如:

  • 开发工具类组件时,选择功能丰富的zipfile模块
  • 处理数据快照时,用shutil模块实现快速存档

这些方案能有效提升开发效率,帮助开发者快速完成文件管理操作。

文章目录

共计0人评分,平均0

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

告诉我们如何改善这篇文章?

文章标题:Python实现解压缩文件或文件夹的2种内置方法详解
更新时间:2025年04月18日 21时44分40秒
文章链接:https://www.sokb.cn/soyi-5181.html
文章版权:易搜资源网所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系我们!
Like (0)
Previous 2025 年 4 月 18 日 下午9:41
Next 2025 年 4 月 18 日 下午9:46

相关推荐

发表回复

Please Login to Comment