Python生成.gz压缩文件时内部文件名与原文件不符如何解决
问题原因
gzip格式的文件头包含可选的原文件名字段,你当前使用的gzip.open()方法默认不会写入该字段,解压工具读取不到原文件名信息,就会默认使用压缩包自身的文件名作为解压后的文件名称。
解决方法
使用gzip.GzipFile类替代gzip.open(),主动指定filename参数,把原文件名写入gzip文件头即可,修改后的代码如下:
import shutil, gzip, os text_file = 'C:\\Users\\lenovo-miguel\\Downloads\\python\\text_file.txt' gz_file = text_file + '.GZ' # 提取原文件的纯文件名,避免把本地绝对路径写入压缩包元数据 original_filename = os.path.basename(text_file) with open(text_file, 'rb') as f_in: with gzip.GzipFile( filename=original_filename, mode='wb', fileobj=open(gz_file, 'wb') ) as f_out: shutil.copyfileobj(f_in, f_out)
如果你不需要动态适配文件名,也可以直接手动给filename参数赋值为你需要的内部文件名,比如直接写filename='text_file.txt'即可。修改后生成的压缩包解压时,内部文件就会显示为你指定的原文件名。
内容的提问来源于stack exchange,提问作者Miguel Bersano
相关产品推荐
相关产品推荐

