Python-ZipFile获取创建日期

时间:2019-05-09 01:27:23

标签: python python-3.x zipfile

我想获取压缩文件夹中文件的创建日期。

我知道没有zip,可以使用os.path.getctime()函数来实现,并且可以使用ZipInfo.date_time提取压缩文件夹中文件的最后修改日期。但是ZipInfo似乎没有办法提取创建日期。

此外,我尝试使用ZipInfo来获取修改日期,如下所示。

# zip_file is the .zip folder
# screenshot_filename is the file inside .zip
with ZipFile(zip_file, 'r') as my_zip:
    my_zip.getinfo(screenshot_filename)

ZipInfo对象的结果不包含任何date_time信息。下面是示例。

<ZipInfo filename='SCREEN CAP/SS.png' compress_type=deflate external_attr=0x20 file_size=555790 compress_size=504859>

那么,我做错了吗,还是有什么更好的方法可以提取压缩文件夹中文件的创建日期(如果无法创建日期,则可以提取修改日期)?

更新:

我得到了从date_time获取最后修改时间/ ZipInfo的答案。显然,尽管date_time没有在对象中列出,但我们只需访问属性即可获得它,即

my_zip.getinfo(screenshot_filename).date_time

但是,我仍在寻找获得创建日期的答案。

1 个答案:

答案 0 :(得分:0)

默认情况下,ZIP文件仅存储文件的修改日期(with 2 seconds precision,继承自FAT file system limitations)。任何其他元数据都可以存储在extra字段中。

  

注意:Python不会解码extra字段数据,因此您必须根据以下文档自行解析!

extra字段由多个紧随彼此的数据块组成。以下额外的块可用于更精确地存储文件创建或修改日期:

  • NTFS(0x000a);
  • UNIX(0x000d);
  • Info-ZIP Macintosh(0x334d“ M3”);
  • Unix扩展时间戳(0x5455“ UT”);
  • Info-ZIP UNIX(0x5855“ UX”)。

(有关更多信息,请参见Info-ZIP's extra field description

  

注意:从Python 3.7 zipfile开始,模块仅从ZIP的中央目录文件头读取文件信息,因此您可能无法从某些第三方多余的块中获取日期。

请参阅this answer设置提取日期的设置日期。