当前位置: 首页 > article >正文

Python+7z:将文件和目录压缩为ZIP文件

在这个教程中,我们将学习如何使用Python脚本将文件和目录压缩为ZIP文件。我们将使用subprocess模块来调用外部命令行工具7z,这是一个功能强大的文件压缩工具。以下是详细的步骤和代码解析。

1. 准备工作

在开始之前,请确保你的系统中已经安装了7z命令行工具。如果没有安装,你可以从7-Zip官网下载并安装。安装好后,找到7z.exe执行文件,复制该文件到项目中,或者将所在目录路径添加到系统环境中。

2. 代码解析
import subprocess
from pathlib import Path


def compress_to_zip_from_files(files_to_compress, output_zip_file, password=None):
    """
    将多个文件压缩到指定zip文件中
    :param files_to_compress: 需要压缩的文件
    :param output_zip_file: 输出zip文件路径
    :param password: 加密密码
    :return: 命令执行结果
    """
    # 构建7z命令,添加-p参数后跟密码以添加加密
    command = ['7z', 'a', '-tzip', output_zip_file] + list(files_to_compress)
    if password:
        command.append('-p' + str(password))
    # 调用7z命令行工具
    return subprocess.run(command).returncode


def compress_to_zip_from_dir(dir_path, password=''):
    """
    将指定目录下的文件压缩到一个zip文件中,该zip文件保存在同级目录中
    :param dir_path: 待压缩文件所在文件夹路径
    :param password: 加密密码
    :return: 命令执行结果
    """
    files = Path(dir_path).iterdir()
    output_zip_file = f'{dir_path}.zip'
    return compress_to_zip_from_files(files, output_zip_file, password)
2.1 导入模块
import subprocess
from pathlib import Path
  • subprocess模块用于执行外部命令。
  • Path模块用于处理文件路径。
2.2 压缩文件到ZIP
def compress_to_zip_from_files(files_to_compress, output_zip_file, password=None):
    """
    将多个文件压缩到指定zip文件中
    :param files_to_compress: 需要压缩的文件
    :param output_zip_file: 输出zip文件路径
    :param password: 加密密码
    :return: 命令执行结果
    """
    # 构建7z命令,添加-p参数后跟密码以添加加密
    command = ['7z', 'a', '-tzip', output_zip_file] + list(files_to_compress)
    if password:
        command.append('-p' + str(password))
    # 调用7z命令行工具
    return subprocess.run(command).returncode
  • 这个函数接受三个参数:要压缩的文件列表、输出的ZIP文件路径和可选的密码。
  • 构建7z命令,a参数表示添加文件到压缩文件,-tzip指定压缩格式为ZIP。
  • 如果提供了密码,会添加-p参数和密码以加密ZIP文件。
  • 使用subprocess.run执行命令,并返回命令的返回码。
2.3 压缩目录到ZIP
def compress_to_zip_from_dir(dir_path, password=''):
    """
    将指定目录下的文件压缩到一个zip文件中,该zip文件保存在同级目录中
    :param dir_path: 待压缩文件所在文件夹路径
    :param password: 加密密码
    :return: 命令执行结果
    """
    files = Path(dir_path).iterdir()
    output_zip_file = f'{dir_path}.zip'
    return compress_to_zip_from_files(files, output_zip_file, password)
  • 这个函数接受两个参数:目录路径和可选的密码。
  • 使用Path.iterdir()获取目录下的所有文件和子目录。
  • 构建输出的ZIP文件路径,直接在原目录下创建同名的ZIP文件。
  • 调用compress_to_zip_from_files函数进行压缩。
3. 使用脚本

在脚本的if __name__ == '__main__':部分,我们可以直接调用compress_to_zip_from_dir函数来压缩指定目录。

if __name__ == '__main__':
    compress_to_zip_from_dir(
        r"C:\Users\user\Desktop\1",
        '123'
    )
  • 这里指定了目录路径和密码123
  • 脚本将压缩指定目录下的所有文件,并创建一个加密的ZIP文件。
4. 注意事项
  • 确保提供的路径和文件名是正确的,否则脚本可能会失败。
  • 确保7z工具已经安装在你的系统上。
  • 如果你不想加密ZIP文件,可以省略密码参数或将其设置为空字符串。

通过这个教程,你应该能够理解如何使用Python脚本和7z工具来压缩文件和目录。你可以根据需要修改脚本,以适应不同的压缩需求。


http://www.kler.cn/a/402808.html

相关文章:

  • 蓝队技能-应急响应篇日志自动采集日志自动查看日志自动化分析Web安全内网攻防工具项目
  • C#开发最快的浏览器,打造极速浏览体验
  • Paint 学习笔记
  • 51单片机基础05 实时时钟-思路及代码参考2、3
  • 掌握Git分布式版本控制工具:从基础到实践
  • 2025蓝桥杯(单片机)备赛--扩展外设之超声波测距原理与应用(十一)
  • Ubuntu22.04LTS 部署前后端分离项目
  • 【代码大模型的隐私安全】Unveiling Memorization in Code Models论文阅读
  • 【SKFramework框架】一、框架介绍
  • 【Mysql】Mysql的多表查询---多表联合查询(中)
  • 多传感器融合slam过程解析【大白话版】
  • 【大语言模型】ACL2024论文-14 任务:不可能的语言模型
  • Django中引用添加css\fonts\js静态文件的方法
  • Redis的基本数据类型
  • C# - 无法加载 DLL“libmupdf.dll”: 找不到指定的模块。
  • 【青牛科技】 GC1288:散热风扇领域中 LA6588 / 三洋的理想替代者
  • React中事件绑定和Vue有什么区别?
  • 【金融风控项目-06】:风控建模流程
  • 论文分享 | FuzzLLM:一种用于发现大语言模型中越狱漏洞的通用模糊测试框架
  • <QNAP 453D QTS-5.x> 日志记录:在 Docker 中运行的 Flask 应用安装 自签名 SSL 证书 解决 Chrome 等浏览器证书安全