如何从Python设置文件的最后修改时间?

问题描述 投票:0回答:5

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

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

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

现在我有一个要求,通过FTP下载的文件需要与FTP服务器本身上的文件具有相同的最后修改时间。假设我可以从

ftp.retrlines('list')
中解析出时间,我如何在下载的文件上设置修改时间?

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

python unix last-modified
5个回答
123
投票

使用

os.utime

import os

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

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


58
投票

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

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

示例:

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

💡 - 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)

💡 - 对于 Python 版本 < 3.3 use

dt_epoch = time.mktime(dt.timetuple())


23
投票

有两种方法可以做到这一点。 一个是

os.utime
示例 如果您要在没有时间戳的文件上设置时间戳,则需要 参考统计数据。

但是,如果您使用

shutil.copy()
复制文件,您将获得 参考文件。 然后,如果您想要权限位、上次访问时间, 最后修改时间,并且标志也被复制,您可以使用
shutil.copystat()
紧接在
shutil.copy()
之后。

然后还有

shutil.copy2
,旨在同时完成这两件事......


0
投票

使用上面的 datetime 没有意义 - 使用 time.time() 代替。


0
投票

不知何故,time.time()在这里不能用作access_time和modification_time,因为我得到了TypeError:'builtin_function_or_method'对象不能被解释为整数。以下内容是从之前的答案中借来的,它对我有用。

dt = datetime.datetime.now()
ts = dt.astimezone(datetime.timezone.utc).timestamp()
os.utime(file_path, times=(ts, ts))
© www.soinside.com 2019 - 2024. All rights reserved.