我有一个 python 脚本,它使用 ftplib 通过 FTP 下载文件。
我当前的下载代码看起来就像 ftp lib 文档中的示例:
ftp.retrbinary('RETR README', open('README', 'wb').write)
现在我有一个要求,通过FTP下载的文件需要与FTP服务器本身上的文件具有相同的最后修改时间。假设我可以从
ftp.retrlines('list')
中解析出时间,我如何在下载的文件上设置修改时间?
我使用的是基于 UNIX 的操作系统,如果这很重要的话。
os.utime
:
import os
os.utime(path_to_file, (access_time, modification_time))
要编辑文件的上次修改字段,请使用:
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())
使用上面的 datetime 没有意义 - 使用 time.time() 代替。
不知何故,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))