如何从python设置文件的上次修改时间?

jde*_*uce 51 python unix last-modified

我有一个python脚本,使用ftplib通过FTP下载文件.

我当前的下载代码看起来就像ftp lib docs中的示例:

ftp.retrbinary('RETR README', open('README', 'wb').write)
Run Code Online (Sandbox Code Playgroud)

现在我要求通过FTP下载的文件需要与FTP服务器本身上的文件具有相同的最后修改时间.假设我可以解析时间ftp.retrlines('list'),如何在下载的文件上设置修改时间?

如果重要的话,我正在使用基于unix的操作系统.

Cha*_*lie 53

用途os.utime:

import os

os.utime(path_to_file, (access_time, modification_time))
Run Code Online (Sandbox Code Playgroud)

  • 这个答案可以通过一个例子和当时格式的讨论来改进;具体来说是一个时代;即@jossef 的答案。 (11认同)

Jos*_*ush 8

要编辑文件上次修改字段,请使用:

os.utime(<file path>, (<access date epoch>, <modification date epoch>))
Run Code Online (Sandbox Code Playgroud)

例子:

os.utime(r'C:\my\file\path.pdf', (1602179630, 1602179630))
Run Code Online (Sandbox Code Playgroud)

- Epoch 是自 1970 年 1 月 1 日以来经过的秒数。查看更多


如果您正在寻找一个datetime版本:

import datetime
import os

def set_file_last_modified(file_path, dt):
    dt_epoch = dt.timestamp()
    os.utime(file_path, (dt_epoch, dt_epoch))

# ...

now = datetime.datetime.now()
set_file_last_modified(r'C:\my\file\path.pdf', now)
Run Code Online (Sandbox Code Playgroud)

- 对于 Python 版本 < 3.3 使用 dt_epoch = time.mktime(dt.timetuple())

  • 谢谢您的回答;它包含示例,详细且有帮助。 (3认同)
  • 这应该就是答案。但晚了8年 (2认同)

小智 7

有两种方法可以做到这一点.一个是上面的os.utime示例,如果您在没有引用统计信息的文件上设置时间戳,则需要该示例.但是,如果您使用"shutil.copy()"复制文件,则会有一个参考文件.然后,如果您希望权限位,上次访问时间,上次修改时间和标志也被复制,您可以在"shutil.copy()"之后立即使用"shutil.copystat()".

我不知道他们为什么不在"shutil.copy()"中添加标志,这些标志在一个命令中执行此操作.好像它是由不同的作者实现的.一个实现了副本,一个实现了copystat以填充前者中缺少的功能.

然后有"shutil.copy2",它打算同时做两件事......