Python获取gzip压缩包内文件修改时间失败,如何解决?
解决方案:获取压缩包内文件的修改时间
问题根源
你混淆了gzip和tar.gz两种格式:
- gzip仅用于单个文件的压缩,它的头部仅存储被压缩的单个文件的元数据,且
GzipFile类没有getinfo方法;如果压缩时未保留原文件修改时间,mtime会返回None。 - 7zip能识别到内部的
my_text.txt,说明你的my_archive.gz实际是tar.gz格式(先将文件打包为tar包,再用gzip压缩),这种情况需要用tarfile模块处理。
针对tar.gz格式的解决代码
import tarfile import time with tarfile.open('my_archive.gz', 'r:gz') as tar: # 获取目标文件的元数据对象 tar_info = tar.getmember('my_text.txt') # 将Unix时间戳转换为(年, 月, 日, 时, 分, 秒)元组 date_time = time.localtime(tar_info.mtime)[:6] print(date_time)
代码说明
tarfile.open('my_archive.gz', 'r:gz'):以读取gzip压缩tar包的模式打开文件。tar.getmember('my_text.txt'):获取tar包内指定文件的TarInfo对象,该对象包含文件的修改时间、权限等元数据。time.localtime(tar_info.mtime)[:6]:将TarInfo中的Unix时间戳转换为结构化时间,截取前6个元素即可得到你需要的格式。
若确实是单个文件的gzip格式
如果你的压缩包确实是单个文件的gzip(即my_archive.gz解压后直接是my_text.txt),可通过以下代码获取修改时间:
from gzip import GzipFile import time with GzipFile('my_archive.gz') as gzip_file: if gzip_file.mtime is not None: date_time = time.localtime(gzip_file.mtime)[:6] print(date_time)
注:若mtime仍为None,说明压缩时未保留原文件的修改时间(比如部分压缩工具未开启保留元数据的选项)。
内容的提问来源于stack exchange,提问作者VERBOSE
相关产品推荐
相关产品推荐

