如果您的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命令,则必须解析它返回的专有列表。
常见的* nix列表如下:
drw-r--r-- 1 user group4096 Mar 26 2018 folder1-20180326drw-r--r-- 1 user group4096 Jun 18 11:21 folder2-20180618-rw-r--r-- 1 user group4467 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 = Nonefor 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 = timeprint(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 = nameprint(latest_name)
某些FTP服务器可能返回
.并
..输入
LIST结果。您可能需要过滤它们。
部分基于:Python
FTP按日期获取最新文件。
如果该文件夹不包含任何文件,仅包含子文件夹,则还有其他更简单的选项。
- 如果要基于修改时间戳记来决定,并且服务器支持非标准
-t
切换,则可以使用:lines = ftp.nlst("-t")latest_name = lines[-1]
请参见如何获取按修改时间排序的FTP文件夹中的文件
- 如果要使用文件名:
lines = ftp.nlst()
latest_name = max(lines)



