[英]How can I set the last modified time of a file from python?
我有一个 python 脚本,它使用ftplib通过 FTP 下载文件。
我当前的下载代码看起来就像 ftp 库文档中的示例:
ftp.retrbinary('RETR README', open('README', 'wb').write)
现在我有一个要求,即通过 FTP 下载的文件需要与 FTP 服务器本身上的文件具有相同的最后修改时间。 假设我可以从ftp.retrlines('list')
中解析出时间,我该如何设置下载文件的修改时间?
如果重要的话,我使用的是基于 unix 的操作系统。
如果你想直接从python这样做,你正在寻找os.utime
。 文档可以为您提供更多信息。
要编辑文件上次修改字段,请使用:
os.utime(<file path>, (<access date epoch>, <modification date epoch>))
例子:
os.utime(r'C:\my\file\path.pdf', (1602179630, 1602179630))
- 纪元是自 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.copystat()
shutil.copy()
。
然后是shutil.copy2
旨在同时执行这两项操作......
#效果很好
import datetime
import os
from datetime import datetime
def modified_st_file(file_path, dt):
dt_epoch = dt.timestamp()
os.utime(file_path, (dt_epoch, dt_epoch))
changets = datetime.fromisoformat('2011-11-04T00:05:23')
#if you want to set current time the use
#changets = datetime.now()
modified_st_file(r"C:/User/falcon.py", changets)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.