Python压缩文件处理_zip与tar解析【指导】


Python处理压缩文件主要用zipfile和tarfile标准库,支持ZIP、GZIP、BZ2、XZ等格式,但不支持RAR、7z;zipfile适合跨平台小文件打包,tarfile适合Linux场景并保留权限等元信息。

Python 中处理压缩文件主要靠 zipfiletarfile 两个标准库,它们无需额外安装,覆盖 ZIP、GZIP、BZ2、XZ 等常见格式,但不支持 RAR、7z 等需第三方库的格式。

用 zipfile 读写 ZIP 文件

zipfile 支持创建、解压、查看、追加 ZIP 文件,适合处理单个压缩包或批量打包小文件。

  • 解压 ZIP:用 ZipFile.extractall() 一键解到指定目录,路径不存在会自动创建
  • 读取文件列表:调用 .namelist() 获取所有成员名,.getinfo(name) 查大小、修改时间等元数据
  • 写入新 ZIP:以 'w' 模式打开,用 .write() 添加本地文件,或 .writestr() 直接写入字符串内容(如生成配置文件)
  • 注意:ZIP 不保留 Linux 权限和符号链接;中文路径需确保系统编码一致,建议统一用 UTF-8 并设置 ZipFile(..., 'r', encoding='utf-8')

用 tarfile 处理 tar/gz/bz2/xz 归档

tarfile 更适合 Linux/Unix 场景,能完整保留权限、用户组、软硬链接、修改时间等元信息。

  • 识别格式:Python 自动根据扩展名判断压缩方式(.tar.gzgzip.tar.xzxz),也可显式指定 mode='r:gz'
  • 安全解压:避免路径遍历漏洞,推荐先用 tar.getnames() 检查文件名,过滤含 '../' 或绝对路径的项,再调用 extractall()
  • 添加文件:用 .add() 可递归加入整个目录;若只加特定文件,可用 .addfile() 配合 TarInfo 手动构造条目
  • 流式处理:支持从文件对象(如网络响应、内存 BytesIO)读取 tar 流,适合处理大归档或 API 返回的压缩数据

常见问题与绕过技巧

实际使用中容易遇到编码错乱、权限丢失、大文件卡顿等问题。

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

  • 中文乱码:ZIP 默认用 CP437 编码,Windows 下常显示为乱码。解决方法是打开时加 encoding='gbk'(旧版 Windows)或 encoding='utf-8'(现代系统+正确打包)
  • 解压权限异常:tar 解压后文件权限可能为 000,需在 extractall() 后手动 os.chmod(),或用 tar.extract() 单个处理并设 tarinfo.mode
  • 内存占用高:解压超大 ZIP/tar 时,避免一次性 extractall(),改用循环 extract() 或流式读取内容(read() + 解码)处理单个文件
  • 密码保护 ZIP:标准库不支持加密 ZIP(PKZIP 2.0 加密),需用 pyminizipzipfile 配合 pycryptodome 自行实现

选型建议:zipfile 还是 tarfile?

取决于目标平台和需求重点。

  • 跨平台分发小工具、资源包 → 优先 ZIP(Windows/macOS 原生支持好,zipfile 接口简洁)
  • Linux 服务部署、备份归档、需保留权限/链接 → 选 tar + gzip/bz2(tarfile 更可靠)
  • 纯内存操作或临时打包 → ZIP 更轻量;需流式压缩上传 → tarfile 支持更灵活
  • 项目打包发布:推荐用 setuptoolsbuild 工具生成 wheel/sdist,而非手写压缩逻辑


# linux  # python  # windows  # 编码  # 工具  # mac  # 中文乱码  # unix  # macos  # 解压  # win  # 解决方法 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Windows 11怎么设置默认解压软件_Windows 11为ZIP/RAR文件指定默认打开程序  c++中的CRTP是什么 c++奇异递归模板模式【进阶】  c# await 一个已经完成的Task会发生什么  Win11怎么更改盘符_Win11磁盘管理修改驱动器号【步骤】  Win11蓝牙开关不见了怎么办_Win11蓝牙驱动丢失修复教程【方法】  c++ namespace命名空间用法_c++避免命名冲突  Win11怎么退出高对比度模式_Win11取消反色显示快捷键【修复】  LINUX的SELinux是什么_详解LINUX强制访问控制系统的入门与配置  c++的STL算法库find怎么用 在容器中查找指定元素【实用教程】  短链接怎么用php还原_从基础原理到代码实现教学【详解】  Mac如何修改Hosts文件?(本地开发与屏蔽网站)  Windows11怎么自定义任务栏_Windows11任务栏自定义教程【步骤】  Windows10怎么用“讲述人”读屏辅助 Windows10轻松使用开启讲述人朗读屏幕文字帮助视障用户【教程】  如何在JavaScript中动态拼接PHP的base_url与前端变量  c++协程和线程的区别 c++异步编程模型对比【核心】  Windows电脑键盘突然失灵怎么办?(驱动与硬件排查)  PyTorch DDP 多进程训练在 Kaggle 笔记本中的正确启动方式  零基础学会Python自动化办公_高效处理Excel与PDF文档  Win11怎么解压RAR文件 Win11自带解压功能使用方法  Python多线程使用规范_线程安全解析【教程】  Windows10怎样设置家长控制_Windows10家长控制设置方法【指南】  如何使用Golang实现RPC序列化与反序列化_Golang RPC数据编码与解码方法  Win11如何设置文件关联 Win11修改特定文件类型的默认打开程序【详解】  PHP怎么接收URL中的锚点参数_获取#后面参数值的技巧【详解】  如何诊断并终止卡死的 multiprocessing 子进程  Go语言中slice追加操作的底层共享机制详解  Go语言中正确反序列化多个同级XML元素为结构体切片的方法  Win11怎么关闭OneDrive同步_Win11取消自动备份文件【教程】  Win11怎么关闭定位服务_保护Win11位置隐私设置指南【详解】  php485能和物联网模块通信吗_php485对接NB-IoT模块实例【说明】  Win11色盲模式怎么开_Win11屏幕颜色滤镜设置【关怀】  如何使用Golang反射创建map对象_动态生成键值映射  如何使用Golang实现文件加密_Golang crypto 文件加密示例  如何在Golang中处理URL参数_Golang URL参数解析与路由映射方法  Django密码修改后会话失效的解决方案  Windows10如何查看蓝屏日志_Win10使用事件查看器分析Dump文件  Win11如何设置开机问候语 Win11修改登录界面提示【技巧】  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何关闭Win10自动更新更新_Win10系统自动更新双重关闭技巧  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  Win11怎么设置环境变量_Win11配置Path路径变量【详解】  如何使用Golang搭建Web开发环境_快速启动HTTP服务  PythonPandas数据分析项目教程_时间序列透视表应用  Python lxml的etree和ElementTree有什么区别  win11 OneDrive怎么彻底关闭 Win11禁用并卸载OneDrive教程【分享】  Win11怎么设置任务栏图标大小_Windows11注册表TaskbarSi修改  php8.4如何实现队列任务_php8.4redis队列简单实现方法【教程】  Win11截图快捷键是什么_Win11自带截图工具使用技巧【汇总】  Win10怎么创建桌面快捷方式 Win10为应用创建快捷方式【步骤】  php高频调试功能有哪些_php常用调试函数与工具汇总【解答】 

 2026-01-03

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.