从 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连接后列出目录中的所有文件夹和文件

如何在Python中通过SFTP连接后列出目录中的所有文件夹和文件

FTPSFTP文件下载内容校验

如何使用 WinSCP 脚本从 SFTP 复制新文件

如何使用 pysftp 从 SFTP 下载文件?

如何使用 Python SFTP/Paramiko 将 zip 文件从一台服务器传输到另一台服务器