Python - ZipFile получить дату создания - PullRequest
0 голосов
/ 09 мая 2019

Я хотел бы получить дату создания файла внутри zip-папки.

Я знаю, что без zip этого можно достичь с помощью функции os.path.getctime(), а дату последнего изменения файла внутри zip-папки можно извлечь с помощью 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>

Итак, я сделал это неправильно или есть какой-нибудь лучший способ извлечь дату создания (или дату изменения, если дата создания невозможна) файла внутри zip-папки?

UPDATE:

Я получил ответ, чтобы узнать время последнего изменения / date_time из ZipInfo. По-видимому, хотя date_time не указан в объекте, мы можем получить его, просто обратившись к атрибуту, т.е.

my_zip.getinfo(screenshot_filename).date_time

Однако я все еще ищу ответ для получения даты создания.

1 Ответ

0 голосов
/ 04 июля 2019

По умолчанию в ZIP-файле хранится только дата изменения файла ( с точностью до 2 секунд , унаследовано от Ограничения файловой системы FAT ).Любые дополнительные метаданные могут быть сохранены в поле extra.

Примечание: Python НЕ декодирует данные поля extra, поэтому вы должны проанализировать их самостоятельно в соответствии с документациейниже!

Поле extra состоит из нескольких блоков данных, которые непосредственно следуют друг за другом.Следующие дополнительные блоки могут использоваться для более точного хранения файла создания или даты изменения:

  • NTFS (0x000a);
  • UNIX (0x000d);
  • Info-ZIP Macintosh (0x334d "M3");
  • Расширенная временная метка Unix (0x5455 "UT");
  • Info-ZIP UNIX (0x5855 "UX").

(см. Описание дополнительных полей Info-ZIP для получения дополнительной информации)

Примечание: Начиная с Python 3.7 zipfile модуль считывает информацию о файле только из заголовка файла центрального каталога ZIP, поэтому могут возникнуть проблемы с получением дат из дополнительных сторонних блоков.

См. этот ответ , чтобы установить дату создания при ее извлечении.

...