在 Python 中获取最新的 FTP 文件夹名称
Get the latest FTP folder name in Python
我正在尝试编写一个脚本来从最新的子文件中获取最新的文件-
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())
# Only interested in directories
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
命令,你必须解析一个专有列表returns。
常见的 *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
结果中 return .
和 ..
条目。您可能需要过滤这些。
部分基于:Python FTP get the most recent file by date。
如果文件夹不包含任何文件,只有子文件夹,还有其他更简单的选择。
如果你想根据修改时间戳做出决定并且服务器支持非标准-t
开关,你可以使用:
lines = ftp.nlst("-t")
latest_name = lines[-1]
见
如果要使用文件名:
lines = ftp.nlst()
latest_name = max(lines)
我正在尝试编写一个脚本来从最新的子文件中获取最新的文件- 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()) # Only interested in directories 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
命令,你必须解析一个专有列表returns。
常见的 *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
结果中 return .
和 ..
条目。您可能需要过滤这些。
部分基于:Python FTP get the most recent file by date。
如果文件夹不包含任何文件,只有子文件夹,还有其他更简单的选择。
如果你想根据修改时间戳做出决定并且服务器支持非标准
-t
开关,你可以使用:lines = ftp.nlst("-t") latest_name = lines[-1]
见
如果要使用文件名:
lines = ftp.nlst() latest_name = max(lines)