我有一个使用ftplib下载FTP文件的Python脚本。
我的当前下载代码与ftp库文档中的示例完全相同:
ftp.retrbinary('RETR README', open('README', 'wb').write)
现在我有一个要求,下载的文件需要与FTP服务器上的文件具有相同的最后修改时间。假设我可以从 ftp.retrlines('list')
中解析出时间,那么如何设置下载文件的修改时间呢?
如果这很重要,我使用的是基于Unix的操作系统。
我有一个使用ftplib下载FTP文件的Python脚本。
我的当前下载代码与ftp库文档中的示例完全相同:
ftp.retrbinary('RETR README', open('README', 'wb').write)
现在我有一个要求,下载的文件需要与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,请使用
dt_epoch = time.mktime(dt.timetuple())
有两种方法可以做到这一点。其中一种是os.utime
示例,如果您要设置没有引用统计信息的文件的时间戳,则需要使用此方法。
但是,如果您正在使用shutil.copy()
复制文件,则有一个参考文件。然后,如果您想要复制权限位、上次访问时间、上次修改时间和标志,可以在shutil.copy()
之后立即使用shutil.copystat()
。
还有一个shutil.copy2
函数,旨在同时完成这两个步骤...