Proč nepoužijete možnost next dir?
ftp.dir('-t',data.append)
S touto volbou je výpis souborů časově řazen od nejnovějšího po nejstarší. Poté stačí načíst první soubor v seznamu a stáhnout jej.
Pro ty, kteří hledají úplné řešení pro nalezení nejnovějšího souboru ve složce:
MLSD
Pokud váš FTP server podporuje MLSD
příkaz, řešení je snadné:
entries = list(ftp.mlsd())
entries.sort(key = lambda entry: entry[1]['modify'], reverse = True)
latest_name = entries[0][0]
print(latest_name)
SEZNAM
Pokud se potřebujete spolehnout na zastaralý LIST
musíte analyzovat proprietární výpis, který vrací.
Běžný zápis *nix je jako:
-rw-r--r-- 1 user group 4467 Mar 27 2018 file1.zip
-rw-r--r-- 1 user group 124529 Jun 18 15:31 file2.zip
S výpisem, jako je tento, tento kód udělá:
from dateutil import parser
# ...
lines = []
ftp.dir("", lines.append)
latest_time = None
latest_name = None
for line in lines:
tokens = line.split(maxsplit = 9)
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)
Toto je poměrně křehký přístup.
MDTM
Spolehlivější, ale méně efektivní je použití MDTM
příkaz k načtení časových razítek jednotlivých souborů/složek:
names = ftp.nlst()
latest_time = None
latest_name = None
for name in names:
time = ftp.voidcmd("MDTM " + name)
if (latest_time is None) or (time > latest_time):
latest_name = name
latest_time = time
print(latest_name)
Alternativní verzi kódu naleznete v odpovědi od @Paulo.
Nestandardní přepínač -t
Některé FTP servery podporují proprietární nestandardní -t
přepněte na NLST
(nebo LIST
) příkaz.
lines = ftp.nlst("-t")
latest_name = lines[-1]
Viz Jak získat soubory ve složce FTP seřazené podle času úpravy.
Stahování nalezeného souboru
Bez ohledu na to, jaký přístup použijete, jakmile budete mít latest_name
, stáhnete jej jako jakýkoli jiný soubor:
with open(latest_name, 'wb') as f:
ftp.retrbinary('RETR '+ latest_name, f.write)
Viz také
- Získejte nejnovější název složky FTP v Pythonu
- Jak získat čas úpravy souboru FTP pomocí Python ftplib
S NLST
, jak je uvedeno v odpovědi Martina Přikryla, měli byste použít sorted
metoda:
ftp = FTP(host="127.0.0.1", user="u",passwd="p")
ftp.cwd("/data")
file_name = sorted(ftp.nlst(), key=lambda x: ftp.voidcmd(f"MDTM {x}"))[-1]