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))
代码说明
- 路径修正:明确区分原文件路径和归档文件路径,彻底避免覆盖原文件的风险。
- 资源管理:用
with语句操作tar文件,能自动在代码块结束后关闭文件,比手动tar.close()更可靠,还能避免遗漏关闭操作导致的问题。 - 归档内容控制:
arcname参数指定归档内的文件名,这样解压后会直接得到MyArchive.txt,而不是嵌套的完整目录结构,更符合常规使用习惯。
如果你的需求是归档整个C:\MyFolder\文件夹,只需要把source_file换成my_root,同时确保archive_path是一个全新的路径(比如C:\\MyFolder_archive.tar.gz),就不会覆盖任何原文件啦。
内容的提问来源于stack exchange,提问作者gdogg371
相关产品推荐
相关产品推荐

