87

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

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

ftp.retrbinary('RETR README', open('README', 'wb').write)

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

如果这很重要,我使用的是基于 unix 的操作系统。

4

3 回答 3

93

使用os.utime

import os

os.utime(path_to_file, (access_time, modification_time))

更详细的例子:https ://www.tutorialspoint.com/python/os_utime.htm

于 2016-08-03T21:40:18.180 回答
20

要编辑文件最后修改字段,请使用:

os.utime(<file path>, (<access date epoch>, <modification date epoch>))

例子:

os.utime(r'C:\my\file\path.pdf', (1602179630, 1602179630))

- 纪元是自 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)

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

于 2020-10-08T18:00:28.447 回答
14

有两种方法可以做到这一点。如果您在没有参考统计信息的文件上设置时间戳,则一个示例是必需的os.utime

但是,如果您要复制文件,则shutil.copy()您有一个参考文件。然后,如果您想复制权限位、上次访问时间、上次修改时间和标志,则可以 shutil.copystat()shutil.copy().

然后shutil.copy2是打算同时做这两件事......

于 2014-09-12T18:32:35.310 回答