如何通过pysftp获取SFTP服务器文件的最后修改时间
pysftp获取文件修改时间实现方案
你自定义的My_Connection类继承了pysftp.Connection的所有原生方法,无需额外封装函数,直接通过内置属性查询接口即可获取文件最后修改时间,两种常用场景的实现如下:
方法1:查询单个指定文件的修改时间
调用stat(远程文件路径)方法,返回的SFTP属性对象中st_mtime字段即为文件最后修改的秒级Unix时间戳,可直接存储到Mongo,也可转换为datetime格式存储。
from datetime import datetime # 实例化自定义连接 with My_Connection( host="你的SFTP服务地址", username="登录账号", password="登录密码" ) as sftp: # 替换为目标文件的远程路径 target_file = "/data/report/2024.csv" # 获取文件属性 file_attr = sftp.stat(target_file) # 原始时间戳(可直接存入Mongo) modify_ts = file_attr.st_mtime # 可选:转换为可读datetime格式 modify_dt = datetime.fromtimestamp(modify_ts) print(f"文件修改时间戳:{modify_ts},可读时间:{modify_dt}")
方法2:批量获取目录下所有文件的修改时间
如果需要遍历目录获取大量文件的修改时间,优先使用listdir_attr(远程目录路径)方法,仅需一次请求即可拿到目录下所有文件的属性,性能远高于循环调用stat。
import stat with My_Connection( host="你的SFTP服务地址", username="登录账号", password="登录密码" ) as sftp: # 替换为目标目录的远程路径 target_dir = "/data/report/" # 遍历目录下所有文件/文件夹属性 for attr in sftp.listdir_attr(target_dir): # 过滤掉文件夹,只保留文件 if stat.S_ISREG(attr.st_mode): print(f"文件名:{attr.filename},修改时间戳:{attr.st_mtime}")
注意事项
st_mtime返回的是SFTP服务器所在时区的时间戳,如需转换为本地时间存储,请对齐时区避免出现时间偏差- 如果查询的是软链接文件,
stat()会自动返回链接指向的源文件属性,如需获取软链接本身的属性,可改用lstat()方法 - 时间戳存储到Mongo时建议保留原始Unix时间戳格式,后续做时间对比、格式转换时更灵活
内容的提问来源于stack exchange,提问作者Pratyush Srivastava
相关产品推荐
相关产品推荐

