在python中解压缩文件,但不要更改文件创建时间

时间:2013-05-31 20:57:07

标签: python zip

我已尝试过多种方法来使用Python解压缩文件,但每种方法最终都会产生错误的创建时间(因为Python创建了该文件的新副本,而不是真正从压缩文件中提取它)。例如,在2012-12-21创建的文件将在使用Python提取时显示今天的创建日期,但如果我使用其他内容(如WinZip),则文件创建时间不会更改。

有没有办法在不改变创建时间的情况下使用Python解压缩文件?

@Jason Sperske,这是我正在使用的代码:

   zf = zipfile.ZipFile(fn)
   for name in zf.namelist():
        filename = os.path.basename(name)
        zf.extract(name, filepath)
    zf.close()

另一个版本:

zf = zipfile.ZipFile(fn)
for name in zf.namelist():
    source = zf.open(name)
    target = open(os.path.join(filepath, filename), "wb")
    with source, target:
    shutil.copyfileobj(source, target)

我也在python中调用了winzip,但它很有用但很烦人。它打开了许多窗户探索窗户。

1 个答案:

答案 0 :(得分:1)

在Python中没有通用的方法来设置文件的创建时间,您可以使用os.utime来设置修改和访问时间。

在Windows文件系统上,您可以使用win32file指定创建文件的时间。有关详细信息,请参阅this answer

在Linux文件系统上,实际上没有“创建日期”,只有inode的最后修改时间戳。要编辑它,您需要破解文件系统本身(在卸载时),更改系统时间或破解内核以允许编辑inode。 This answer显示后两者的解决方案。

在Mac上,您可以调用setfile -d来更改创建日期,但您必须先安装它。您可以找到its docs here

不确定BSD或其他操作系统。