在将文件添加到zip文件时,是否有可能强制使用特定的时间戳?
类似以下操作:
with ZipFile('spam.zip', 'w') as myzip:
myzip.write('eggs.txt', date_time=(1752, 9, 9, 15, 0, 0))
我能否更改zipfile成员的ZipInfo?
在将文件添加到zip文件时,是否有可能强制使用特定的时间戳?
类似以下操作:
with ZipFile('spam.zip', 'w') as myzip:
myzip.write('eggs.txt', date_time=(1752, 9, 9, 15, 0, 0))
我能否更改zipfile成员的ZipInfo?
查看CPython 3.7中ZipFile.write()
的源代码,该方法总是通过检查磁盘上的文件来获取其ZipInfo
,包括一些元数据,如修改时间和特定于操作系统的属性(请参见ZipInfo.from_file()
源代码)。
因此,要解决这个限制,您需要在写入文件时提供自己的ZipInfo
- 这意味着使用ZipFile.writestr()
并为其提供一个ZipInfo
和从磁盘读取的文件数据,如下所示:
from zipfile import ZipFile, ZipInfo
with ZipFile('spam.zip', 'w') as myzip, open('eggs.txt') as txt_to_write:
info = ZipInfo(filename='eggs.txt',
# Note that dates prior to 1 January 1980 are not supported
date_time=(1980, 1, 1, 0, 0, 0))
myzip.writestr(info, txt_to_write.read())
或者,如果您仅想修改ZipInfo
的日期,您可以从ZipInfo.from_file()
获取它并重置其date_time
字段:
info = ZipInfo.from_file('eggs.txt')
info.date_time = (1980, 1, 1, 0, 0, 0)