当前位置: 首页 > 面试题库 >

在Python中获取最新的FTP文件夹名称

姬宝
2023-03-14
问题内容

我正在尝试编写脚本以从Python中FTP服务器的最新子目录获取最新文件。我的问题是我无法找出最新的子目录。有两个选项可用,子目录具有ctime可用。在目录名称中还提到了日期,即在哪个日期创建了目录。但是我不知道如何获取最新目录的名称。我想出了以下方法(希望服务器端按最新的ctime排序)。我已经按照以下方式进行了操作,如果第一个对象是最新目录,它将可以正常工作。

import ftplib 
import os
import time

ftp = ftplib.FTP('test.rebex.net','demo', 'password')
ftp.cwd(str((ftp.nlst())[0])) #if directory is sorted in descending order by date.

但是,有什么方法可以通过ctime或目录名称中的日期找到确切的目录?

非常感谢。


问题答案:

如果您的FTP服务器支持MLSD命令,则解决方案很简单:

  • 如果您要根据修改时间戳记做出决定:

    entries = list(ftp.mlsd())
    

    entries = [entry for entry in entries if entry[1][“type”] == “dir”]

    Sort by timestamp

    entries.sort(key = lambda entry: entry[1][‘modify’], reverse = True)

    Pick the first one

    latest_name = entries[0][0]
    print(latest_name)

  • 如果要使用文件名:

    # Sort by filename
    

    entries.sort(key = lambda entry: entry[0], reverse = True)

如果您需要使用过时的LIST命令,则必须解析它返回的专有列表。

常见的* nix列表如下:

drw-r--r-- 1 user group           4096 Mar 26  2018 folder1-20180326
drw-r--r-- 1 user group           4096 Jun 18 11:21 folder2-20180618
-rw-r--r-- 1 user group           4467 Mar 27  2018 file-20180327.zip
-rw-r--r-- 1 user group         124529 Jun 18 15:31 file-20180618.zip

使用这样的清单,此代码将执行以下操作:

  • 如果您要根据修改时间戳记做出决定:

    lines = []
    

    ftp.dir(“”, lines.append)

    latest_time = None
    latest_name = None

    for line in lines:
    tokens = line.split(maxsplit = 9)
    # Only interested in directories
    if tokens[0][0] == “d”:
    time_str = tokens[5] + ” ” + tokens[6] + ” ” + tokens[7]
    time = parser.parse(time_str)
    if (latest_time is None) or (time > latest_time):
    latest_name = tokens[8]
    latest_time = time

    print(latest_name)

  • 如果要使用文件名:

    lines = []
    

    ftp.dir(“”, lines.append)

    latest_name = None

    for line in lines:
    tokens = line.split(maxsplit = 9)
    # Only interested in directories
    if tokens[0][0] == “d”:
    name = tokens[8]
    if (latest_name is None) or (name > latest_name):
    latest_name = name

    print(latest_name)

某些FTP服务器可能返回...输入LIST结果。您可能需要过滤它们。

部分基于:Python
FTP按日期获取最新文件。

如果该文件夹不包含任何文件,仅包含子文件夹,则还有其他更简单的选项。

  • 如果要基于修改时间戳记来决定,并且服务器支持非标准-t切换,则可以使用:
    lines = ftp.nlst("-t")
    

    latest_name = lines[-1]

请参见如何获取按修改时间排序的FTP文件夹中的文件

  • 如果要使用文件名:
    lines = ftp.nlst()
    

    latest_name = max(lines)



 类似资料:
  • 问题内容: 在Python中,我应该使用哪个命令来获取包含正在使用的文件的文件夹的名称? 这就是我想要得到的。 我唯一想出的就是使用两次: 有什么更好的方法吗? 问题答案: 您可以使用: 返回路径名path的目录名。这是通过将路径传递给函数split()返回的对中的第一个元素。 给定完整路径,然后您可以正常拆分以获取路径的最后一部分。例如,通过使用: 返回路径名path的基本名称。这是通过将路径传

  • 问题内容: 尝试创建一个简单的插件,该插件仅连接到ftp站点,查找最新文件,然后下载。但是,它没有获取最新文件。 我正在使用org.apache.commons.net.ftp.ftpclient进行所有操作。 这是我的代码 它获取文件列表,然后返回文件,它不是最新文件。还有其他方法可以使用FTPClient比较文件修改日期,或者有人可以向我指出我做错了什么。谢谢。 问题答案: 我将创建一个比较器

  • 问题内容: 我正在使用ftplib连接到ftp站点。我想获取最新上传的文件并下载。我能够连接到ftp服务器并列出文件,我也将它们放在列表中并进行了转换。是否有任何功能/模块可以获取最新日期并从列表中输出整行? 解决: 一个问题,是否可以从字典中检索第一个元素?我在这里所做的是,for循环仅运行一次并退出,从而为我提供了一个很好的第一个排序值,但是我认为以这种方式进行操作不是一个好习惯。 问题答案:

  • 在Python中,我应该使用什么命令来获取包含我正在处理的文件的文件夹的名称? 这里就是我想要得到的。 我唯一想到的是使用两次: 还有更好的方法吗?

  • filename变量用于获取最新文件的名称。我的目标是监视文件夹,每当检索到新文件时,使用boto3自动将其上载到s3 bucket。 会话=BOT3。会话(aws\u access\u key\u id='aws\u access\u key\u id',aws\u secret\u access\u key='aws\u secret\u access\u key',region\u name

  • 我试着用这篇文章来查找上次修改的文件,然后用AWS CLI从S3获取上次修改的对象 但这对于1000多个文件夹来说并不理想,而且根据文档,这应该是失败的。我需要搜索2000个文件夹对象。我想要的文件夹总是以D开头,后面跟着一组递增的数字。例:D1200 答案的结果让我创建了这个调用,它很有效: 但搜索数千个文件需要40秒,然后我需要正则表达式解析输出,以找到文件夹对象,而不是其中修改的最后一个文件