You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下用Python3.6的tarfile模块创建.tar.gz归档遇问题求助

问题排查与修正方案

我来帮你理清楚代码里的问题,你遇到的情况是因为两个关键设置错误导致的:

核心问题分析

  • 归档路径错误:你把tarfile.open()的目标路径设成了原文件MyArchive.txt的路径,使用w:gz模式打开这个路径时,会直接覆盖掉原有的TXT文件,而不是生成同名的.tar.gz归档包。
  • 归档范围错误:你调用tar.add(my_root)会把整个C:\MyFolder\文件夹全部打包,但你实际需求是只归档单个MyArchive.txt文件,这也不符合预期。

修正后的代码

import os
import tarfile

# 原文件的完整路径
source_file = 'C:\\Myfolder\\MyArchive.txt'
# 生成的tar.gz归档文件路径(和原文件同目录,文件名保持一致,后缀改为.tar.gz)
archive_path = 'C:\\Myfolder\\MyArchive.tar.gz'

# 使用with语句自动管理文件资源,无需手动调用close()
with tarfile.open(archive_path, "w:gz") as tar:
    # 添加单个原文件到归档,arcname参数确保归档内只保留文件名,不带完整路径
    tar.add(source_file, arcname=os.path.basename(source_file))

代码说明

  1. 路径修正:明确区分原文件路径和归档文件路径,彻底避免覆盖原文件的风险。
  2. 资源管理:用with语句操作tar文件,能自动在代码块结束后关闭文件,比手动tar.close()更可靠,还能避免遗漏关闭操作导致的问题。
  3. 归档内容控制:arcname参数指定归档内的文件名,这样解压后会直接得到MyArchive.txt,而不是嵌套的完整目录结构,更符合常规使用习惯。

如果你的需求是归档整个C:\MyFolder\文件夹,只需要把source_file换成my_root,同时确保archive_path是一个全新的路径(比如C:\\MyFolder_archive.tar.gz),就不会覆盖任何原文件啦。

内容的提问来源于stack exchange,提问作者gdogg371

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:58:22