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

时间:2012-07-05 16:50:58

标签: python unix last-modified

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

我当前的下载代码与ftp lib docs中的示例类似:

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

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

如果重要的话,我会使用基于unix的操作系统。

4 个答案:

答案 0 :(得分:50)

如果您想直接从python执行此操作,那么您正在寻找os.utimedocs可以为您提供更多信息。

答案 1 :(得分:39)

使用os.utime

import os

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

答案 2 :(得分:6)

有两种方法可以做到这一点。一个是上面的os.utime示例 如果要在没有的文件上设置时间戳,则需要 参考统计。 但是,如果您使用“shutil.copy()”复制文件,则表示您拥有 参考文件。然后,如果你想要权限位,上次访问时间, 最后修改时间,并且还复制了标志,可以使用 紧跟在“shutil.copy()”之后的“shutil.copystat()”。

我不知道他们为什么不向“shutil.copy()”添加标志 在一个命令中执行此操作。好像它已经实施了 由不同的作者。一个实现了副本,一个实现了 copystat填写前者缺失的功能。

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

答案 3 :(得分:2)

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

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

示例:

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

?-纪元是自1970年1月1日起经过的秒数。see more


如果您正在寻找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)

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