讲师中心 微信公众号
AI工具推荐 视频效率加速

Python中如何实现文件压缩?压缩时如何设置密码保护?

轻萱酱_3005

轻萱酱_3005

发布时间:2025-06-23 23:14:01

|

999人浏览过

|

来源于php中文网

原创

python中实现文件压缩和密码保护的方法有多种。1. zipfile模块可用于zip格式压缩,但加密安全性较低;2. gzip适合单个文件压缩,常用于http场景;3. tarfile适用于打包多个文件,广泛用于linux环境;4. 如需更强加密,可通过subprocess调用7z命令行工具或使用gpg进行加密;5. 大型文件压缩可采用流式处理方式,如gzip.open()分块读写以降低内存占用;6. 适当调整压缩级别有助于平衡压缩速度与压缩率。若需更高级的加密功能,建议结合第三方工具或加密库实现。

Python中如何实现文件压缩?压缩时如何设置密码保护?

Python中实现文件压缩主要依赖于zipfilegziptarfile等模块。至于密码保护,zipfile虽然支持加密,但并非所有实现都支持强加密算法,所以通常需要结合第三方库或工具来实现更安全的文件压缩和密码保护。

Python中如何实现文件压缩?压缩时如何设置密码保护?
import zipfile
import os

def compress_with_password(file_path, zip_path, password):
    """
    使用zipfile压缩文件并设置密码。
    注意:zipfile的加密方式相对简单,不适用于高安全性场景。
    """
    try:
        with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zf:
            zf.setpassword(password.encode()) # 密码必须是bytes类型
            zf.write(file_path, os.path.basename(file_path))
        print(f"文件 {file_path} 成功压缩为 {zip_path},并设置密码。")
    except Exception as e:
        print(f"压缩过程中发生错误:{e}")


# 示例
file_to_compress = "example.txt" # 替换为你的文件路径
zip_archive_path = "example.zip" # 替换为你想要保存的zip文件路径
encryption_password = "MySecretPassword" # 替换为你想要设置的密码

# 创建一个示例文件
with open(file_to_compress, "w") as f:
    f.write("This is a sample file to be compressed.")

compress_with_password(file_to_compress, zip_archive_path, encryption_password)

如何选择合适的Python压缩库?

选择哪个压缩库取决于你的具体需求。zipfile 适合处理ZIP格式,简单易用,但安全性相对较低。gzip 适合压缩单个文件,常用于HTTP压缩。tarfile 适合打包多个文件和目录,常用于Linux环境。 如果你需要更强的加密功能,可以考虑使用 7z 命令行工具,并通过Python的 subprocess 模块调用它。或者研究一些专门用于加密的库,并结合压缩库使用。

Shadows Python Sensei
Shadows Python Sensei

Python 最佳实践助手——代码规范、设计模式、性能优化、测试与类型注解。适用于编写或审查 Python 代码。

下载
Python中如何实现文件压缩?压缩时如何设置密码保护?

如何在Python中实现更高级的加密压缩?

单纯使用 zipfile 进行密码保护并不安全,因为它使用的 PKZIP 加密算法容易被破解。更高级的加密压缩方案通常包括:

立即学习Python免费学习笔记(深入)”;

Python中如何实现文件压缩?压缩时如何设置密码保护?
  1. 使用 7z 命令行工具: 7z 支持 AES-256 等更强大的加密算法。你可以使用 Python 的 subprocess 模块调用 7z 命令行工具进行压缩和加密。
  2. 使用 gpg (GNU Privacy Guard): gpg 是一种强大的加密工具,可以用于加密任何类型的文件。你可以先使用 tarfilezipfile 将文件打包,然后使用 gpg 加密打包后的文件。
  3. 自定义加密流程: 你可以使用 Python 的加密库(如 cryptographyPyCryptodome)对文件进行加密,然后使用 zipfiletarfile 将加密后的文件打包。解压时,需要先解包,然后使用相应的密钥解密文件。
import subprocess

def compress_and_encrypt_with_7z(file_path, archive_path, password):
    """
    使用 7z 命令行工具压缩并加密文件。
    需要确保系统已安装 7z。
    """
    try:
        command = [
            "7z", "a",
            "-tzip", # 指定压缩格式为 zip
            "-p" + password, # 设置密码
            "-mhe=on", # 加密文件头
            archive_path,
            file_path
        ]
        subprocess.run(command, check=True, capture_output=True, text=True) # check=True 抛出异常,capture_output=True 捕获输出,text=True 使用文本模式
        print(f"文件 {file_path} 成功压缩并加密为 {archive_path}。")
    except subprocess.CalledProcessError as e:
        print(f"7z 命令执行失败:{e.stderr}")
    except FileNotFoundError:
        print("7z 命令未找到。请确保已安装 7-Zip 并将其添加到系统 PATH 环境变量中。")

# 示例
file_to_compress = "example.txt" # 替换为你的文件路径
encrypted_archive_path = "example.7z" # 替换为你想要保存的 7z 文件路径
encryption_password = "MyStrongPassword" # 替换为你想要设置的密码

compress_and_encrypt_with_7z(file_to_compress, encrypted_archive_path, encryption_password)

如何处理大型文件的压缩?

压缩大型文件时,内存占用是一个需要考虑的问题。 可以使用流式压缩的方式,避免一次性将整个文件加载到内存中。例如,对于 gzip,可以使用 gzip.open() 以二进制写入模式打开文件,然后分块读取原始文件并写入到压缩文件中。对于 zipfile,可以使用 ZipFile.write() 方法,它也支持从文件流中读取数据。另外,适当调整压缩级别也可以在压缩时间和压缩率之间找到平衡。

import gzip

def compress_large_file(input_file, output_file, chunk_size=4096):
    """
    使用 gzip 压缩大型文件,采用流式处理方式。
    """
    try:
        with open(input_file, 'rb') as infile, gzip.open(output_file, 'wb') as outfile:
            while True:
                chunk = infile.read(chunk_size)
                if not chunk:
                    break
                outfile.write(chunk)
        print(f"大型文件 {input_file} 成功压缩为 {output_file}。")
    except Exception as e:
        print(f"压缩过程中发生错误:{e}")


# 示例
large_file_path = "large_file.txt" # 替换为你的大型文件路径
compressed_file_path = "large_file.gz" # 替换为你想要保存的 gzip 文件路径

# 创建一个大型示例文件
with open(large_file_path, "wb") as f:
    f.seek(1024 * 1024 * 100) # 创建一个 100MB 的文件
    f.write(b"\0")

compress_large_file(large_file_path, compressed_file_path)

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

4636

2023.08.14

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2843

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

794

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

6066

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5230

2024.08.16

Go 语言 HTTP 编程与中间件开发教程合集
Go 语言 HTTP 编程与中间件开发教程合集

全面讲解 Go 语言 HTTP 编程的核心知识,涵盖 net/http 标准库的 Server/Handler/HandlerFunc 体系、DefaultServeMux 路由注册与自定义路由器、Request / ResponseWriter 请求响应处理、中间件(Middleware)链式设计模式与常见中间件(日志/CORS/认证/限流)开发、http.Client 的超时配置与连接池管理、Cookie / Session 处理、

381

2026.05.08

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

3610

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

3133

2023.06.29

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

0

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Iris框架官方文档
Iris框架官方文档

共0课时 | 0人学习

好课诞生记
好课诞生记

共20课时 | 7.1万人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn