jde*_*uce 51 python unix last-modified
我有一个python脚本,使用ftplib通过FTP下载文件.
我当前的下载代码看起来就像ftp lib docs中的示例:
ftp.retrbinary('RETR README', open('README', 'wb').write)
Run Code Online (Sandbox Code Playgroud)
现在我要求通过FTP下载的文件需要与FTP服务器本身上的文件具有相同的最后修改时间.假设我可以解析时间ftp.retrlines('list'),如何在下载的文件上设置修改时间?
如果重要的话,我正在使用基于unix的操作系统.
Cha*_*lie 53
用途os.utime:
import os
os.utime(path_to_file, (access_time, modification_time))
Run Code Online (Sandbox Code Playgroud)
要编辑文件上次修改字段,请使用:
os.utime(<file path>, (<access date epoch>, <modification date epoch>))
Run Code Online (Sandbox Code Playgroud)
例子:
os.utime(r'C:\my\file\path.pdf', (1602179630, 1602179630))
Run Code Online (Sandbox Code Playgroud)
- 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)
Run Code Online (Sandbox Code Playgroud)
- 对于 Python 版本 < 3.3 使用
dt_epoch = time.mktime(dt.timetuple())
小智 7
有两种方法可以做到这一点.一个是上面的os.utime示例,如果您在没有引用统计信息的文件上设置时间戳,则需要该示例.但是,如果您使用"shutil.copy()"复制文件,则会有一个参考文件.然后,如果您希望权限位,上次访问时间,上次修改时间和标志也被复制,您可以在"shutil.copy()"之后立即使用"shutil.copystat()".
我不知道他们为什么不在"shutil.copy()"中添加标志,这些标志在一个命令中执行此操作.好像它是由不同的作者实现的.一个实现了副本,一个实现了copystat以填充前者中缺少的功能.
然后有"shutil.copy2",它打算同时做两件事......