更改zip文件元素的最后修改时间

2 投票
1 回答
3583 浏览
提问于 2025-04-18 05:34

我想要修改一个压缩文件里所有文件和文件夹的最后修改时间。
如果我在解释器里逐行运行脚本,最后修改时间好像确实被改了。但是在压缩文件里却没有反映出来。

我正在使用Python的zipfile模块。
下面是我的源代码。

import zipfile as zp
import datetime
import datetime

def main():
    zipfile = raw_input("enter the path for your zipfile :")
    if os.path.exists(zipfile) and zp.is_zipfile(zipfile):
            time = raw_input("enter the time for which your files and folders in zip file want to be changed. format: dd-mm-yyyy HH:MM:SS -")
            if time is not None :
                time = datetime.datetime.strptime(time, "%d-%m-%Y %H:%M:%S")
                newtime = time
                time = (time.year, time.month, time.day, time.hour, time.minute, time.second)             
                print "time =", time
                z = zp.ZipFile(zipfile, "a", zp.ZIP_DEFLATED)
                z.printdir()
                try :
                    for i in range(len(z.filelist)):
                            z.infolist()[i].date_time = time
                    z.printdir()
                finally :
                    z.close()
            else :
                print "you have not entered a valid time!" 
        else :
            print " you have not entered a valid zipfile name. "

if __name__ == "__main__":
    main()

1 个回答

2

用Python自带的zipfile模块,直接实现这个功能是不行的。你可以参考这个问题:在zip文件中覆盖文件

如果你查看ZipFile类的代码,会发现它在close方法中只是把数据添加到原始zip文件的末尾。如果想要修改文件的日期,你需要使用一些第三方库,比如myZip,或者自己实现这个功能。

另一种方法是先把zip文件完全解压,然后再把它重新打包,并更新日期和时间。想了解更多细节,可以查看上面提到的问题的回答。

撰写回答