从 sftp 位置迭代文件并使用 python 选择最新接收的文件
Posted
技术标签:
【中文标题】从 sftp 位置迭代文件并使用 python 选择最新接收的文件【英文标题】:Iterate over the files from a sftp location and pick the latest received file using python 【发布时间】:2021-10-04 12:16:09 【问题描述】:例如,我在 sftp 位置的文件名如下:
AG_DMW_2021052003_5150236
AG_DMW_2021051903_5150236
AG_DMW_2021051803_5150236
AG_DMW_2021051703_5150236
我只需要使用该位置的 python 代码选择文件 #1。 我是python新手,有人帮帮我。
【问题讨论】:
欢迎来到 Stack Overflow!请拨打tour,阅读what's on-topic here、How to Ask和question checklist,并提供minimal reproducible example。 “为我实现此功能”与此站点无关,因为 SO 不是免费的在线编码服务。你必须诚实地尝试,然后就你的算法或技术提出一个具体问题。 【参考方案1】:把它分解成更容易完成的步骤。
-
连接到 SFTP。
列出文件。
从文件名中提取日期
根据 #3 获取最新的
返回文件名(或下载)
我建议使用Paramiko 连接到 SFTP。浏览文档以了解如何连接和如何列出文件,如果需要,如何下载。
至于#3 & #4,见下方代码
from datetime import datetime
listofnames = [
"AG_DMW_2021052003_5150236",
"AG_DMW_2021051903_5150236",
"AG_DMW_2021051803_5150236",
"AG_DMW_2021051703_5150236",
]
def get_date(string: str):
# get the date part as a string
spl = string.split("_")[2][0:8]
# convert to datetime object
return datetime.strptime(spl, "%Y%m%d")
# set initial values
last = None
today = datetime.today()
# set the initial last
last = listofnames[0]
for name in listofnames[1:]:
# you can substract dates and get the day count.
# the one with the lowest day count is the latest
if (today - get_date(name)).days < (today - get_date(last)).days:
last = name
print(last)
输出
AG_DMW_2021052003_5150236
【讨论】:
以上是关于从 sftp 位置迭代文件并使用 python 选择最新接收的文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在Python中通过SFTP连接后列出目录中的所有文件夹和文件