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

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

1. 准备工作

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

2. 代码解析
import subprocess
from pathlib import Pathdef 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).returncodedef 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.xdnf.cn/news/18327.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vmware虚拟机给创建的centos扩展磁盘步骤

1.先看看原来的磁盘信息,目前磁盘是20g的,重点关注红色箭头指向的地方,一个17g 可用11g,接下来要对其进行扩展 df -h2.关闭当前虚拟机,先进行磁盘扩展,目前我扩展到了50g。 3.重新开启虚拟机,…

开源物业管理系统助力智能社区提升服务效率与用户体验

内容概要 开源物业管理系统是一种灵活、智能的解决方案,专为社区物业管理而生。随着智能社区的发展,这种系统变得越来越重要。它不仅帮助物业管理者高效地处理日常事务,还提升了居民的生活体验。在这个日新月异的时代,开源物业管…

深入理解 Redis跳跃表 Skip List 原理|图解查询、插入

1. 简介 跳跃表 ( skip list ) 是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 在 Redis 中,跳跃表是有序集合键的底层实现之一,那么这篇文章我们就来讲讲跳跃表的实现原理。 2. …

【数据库】mysql数据库迁移前应如何备份数据?

MySQL 数据库的备份是确保数据安全的重要措施之一。在进行数据库迁移之前,备份现有数据可以防止数据丢失或损坏。以下是一套详细的 MySQL 数据库备份步骤,适用于大多数情况。请注意,具体的命令和工具可能因 MySQL 版本的不同而有所差异。整个…

AWTK-WIDGET-WEB-VIEW 实现笔记 (4) - Ubuntu

Ubuntu 上实现 AWTK-WIDGET-WEB-VIEW 开始以为很简单,后来发现是最麻烦的。因为 Ubuntu 上的 webview 库是 基于 GTK 的,而 AWTK 是基于 X11 的,两者的窗口系统不同,所以期间踩了几个大坑。 1. 编译 AWTK 在使用 Linux 的输入法时…

Rocket入门练习

搭建部署: 1. 部署平台和部署方式: Ubuntu:22.10 部署方式:源码安装部署 a. 下载源码到本地:rocketmq-all-5.3.1-source-release.zip $ unzip rocketmq-all-5.3.1-source-release.zip // 解压缩 $ cd rocketmq-all…

视觉SLAM相机——单目相机、双目相机、深度相机

一、单目相机 只使用一个摄像头进行SLAM的做法称为单目SLAM,这种传感器的结构特别简单,成本特别低,单目相机的数据:照片。照片本质上是拍摄某个场景在相机的成像平面上留下的一个投影。它以二维的形式记录了三维的世界。这个过程中…

EM算法与高斯混合聚类:理解与实践

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

悬浮窗,ViewPager2内嵌套RecyclerView,RecyclerView高度异常的问题分析

1 背景 在一个Adnroid项目中,使用到了悬浮窗,其中有一个需求是以分页的显示显示媒体item,每一页中展示的媒体item是一个网格列表的形式显示的。 原型图如下: 2 实现方案 上述需求实现分页采用ViewPager2,在xml中的…

wordpress使用相关

这里写目录标题 遇到的相关问题WordPress安装插件过程中遇到需要ftp出现确实XMLReader 插件的提示cURL Support Missing(curl 缺失) 遇到的相关问题 WordPress安装插件过程中遇到需要ftp 一般在这个位置 出现确实XMLReader 插件的提示 解决&#xff1a…

安卓手机root+magisk安装证书+抓取https请求

先讲一下有这篇文章的背景吧,在使用安卓手机fiddler抓包时,即使信任了证书,并且手机也安装了证书,但是还是无法捕获https请求的问题,最开始不知道原因,后来慢慢了解到现在有的app为了防止抓包,把…

本草云端:中药实验管理的云服务

3系统分析 3.1可行性分析 通过对本中药实验管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本中药实验管理系统采用SSM框架,JAVA作为开发语…

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

【Mysql】Mysql函数(上)

1、概述 在Mysql中,为了提高代码重用性和隐藏实现细节,Mysql提供了很多函数。函数可以理解为封装好的模块代码。 2、分类 在Mysql中,函数非常多,主要可以分为以下几类: (1)聚合函数 &#xf…

[369]基于springboot的高校教师教研信息填报系统

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校教师教研信息填报系统信息管理难度大,容错…

【Linux】进程信号

文章目录 1. 信号2. 信号的产生2.1 键盘产生2.2 系统指令产生2.3 系统调用产生2.4 软件条件产生2.5 异常产生信号 3. 信号的保存3.1 信号其它概念3.2 信号操作函数 4. 信号的处理(捕捉)4.1 原理4.1.1 信号处理的流程(用户态与内核态)4.1.2 硬件中断4.1.3 时钟中断4.1.4 软中断4…

Python数据分析NumPy和pandas(三十四、数据透视表和交叉表)

数据透视表是电子表格程序和其他数据分析软件中常见的数据汇总工具。它按一个或多个键聚合数据表,一些组键沿行,一些组键沿列将数据排列在一个矩形中。我们使用 pandas 的 groupby 结合分层索引在Python 中实现数据透视表。DataFrame 有一个 pivot_table…

应用系统开发(10) 钢轨缺陷的检测系统

涡流检测系统框图 其中信号发生器为一定频率的正弦信号作为激励信号,这个激励信号同时输入给交流电桥中的两个检测线圈,将两个线圈输出的电压差值作为差分信号引出至差分放大电路进行放大,经过放大后信号变为低频的缺陷信号叠加在高频载波上…

Vanna使用ollama分析本地MySQL数据库 加入redis保存训练记录

相关代码 from vanna.base.base import VannaBase from vanna.chromadb import ChromaDB_VectorStore from vanna.ollama import Ollama import logging import os import requests import json import pandas as pd import chromadb import redis import pickle from IPython.…

基于Java Springboot校园疫情防控系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…