我有一个python脚本,可以使用ftplib通过FTP下载文件。
我当前的下载代码与ftp lib docs中的示例类似:
ftp.retrbinary('RETR README', open('README', 'wb').write)
现在我要求通过FTP下载的文件需要与FTP服务器本身上的文件具有相同的最后修改时间。假设我可以从ftp.retrlines('list')
解析时间,如何在下载的文件上设置修改时间?
如果重要的话,我会使用基于unix的操作系统。
答案 0 :(得分:50)
如果您想直接从python执行此操作,那么您正在寻找os.utime
。 docs可以为您提供更多信息。
答案 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())