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

标签 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,它可以工作,但很烦人。它会打开许多​​窗口探索窗口。

最佳答案

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

在 Windows 文件系统上,您可以使用 win32file 指定创建文件的时间。请参阅this answer了解详情。

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

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

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

关于python - 在python中解压缩文件但不更改文件创建时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16865861/

相关文章:

python - 如何将 some_time|timeuntil 与 Django 模板中的特定时间间隔进行比较?

Python - 让我的宇宙飞船朝其面向的方向射击第 2 部分

python - 在函数 : cannot list zipped objects? 中调试

java - 压缩子目录仅压缩子目录的内容而不压缩子目录

c# - 创建文本文件,将它们压缩到 ZipArchive 中并提供以供下载

python - 如何使用 python zipfile 库检查 zip 文件是否拆分为多个存档?

python - Nginx、django、gunicorn、ubuntu 14.04 (13 : Permission denied) while connecting to upstream

python - 如何根据其他两列有条件地创建新的 pandas DF 列

php - 从 Python 到 PHP 丢失 JSON 值?

android - 未找到中央目录条目 (ZipException)