Python-FTP Holen Sie sich die aktuellste Datei nach Datum
Ich bin mit ftplib eine Verbindung zu einer ftp-site. Ich möchte das zuletzt hochgeladene Datei und laden Sie es. Ich bin in der Lage, eine Verbindung zum ftp-server und die Liste der Dateien, die ich auch haben setzen Sie Sie in einer Liste und bekam die datefield
umgewandelt. Gibt es eine Funktion/Modul, kann man die jüngsten Datum und Ausgabe der ganzen Zeile aus der Liste?
#!/usr/bin/env python
import ftplib
import os
import socket
import sys
HOST = 'test'
def main():
try:
f = ftplib.FTP(HOST)
except (socket.error, socket.gaierror), e:
print 'cannot reach to %s' % HOST
return
print "Connect to ftp server"
try:
f.login('anonymous','[email protected]')
except ftplib.error_perm:
print 'cannot login anonymously'
f.quit()
return
print "logged on to the ftp server"
data = []
f.dir(data.append)
for line in data:
datestr = ' '.join(line.split()[0:2])
orig-date = time.strptime(datestr, '%d-%m-%y %H:%M%p')
f.quit()
return
if __name__ == '__main__':
main()
GELÖST:
data = []
f.dir(data.append)
datelist = []
filelist = []
for line in data:
col = line.split()
datestr = ' '.join(line.split()[0:2])
date = time.strptime(datestr, '%m-%d-%y %H:%M%p')
datelist.append(date)
filelist.append(col[3])
combo = zip(datelist,filelist)
who = dict(combo)
for key in sorted(who.iterkeys(), reverse=True):
print "%s: %s" % (key,who[key])
filename = who[key]
print "file to download is %s" % filename
try:
f.retrbinary('RETR %s' % filename, open(filename, 'wb').write)
except ftplib.err_perm:
print "Error: cannot read file %s" % filename
os.unlink(filename)
else:
print "***Downloaded*** %s " % filename
return
f.quit()
return
Einem problem, ist es möglich, um das erste element aus dem dictionary? was ich hier getan habe, ist, dass die for-Schleife läuft nur einmal durch und beendet damit die mir den ersten Wert sortiert, das ist in Ordnung, aber ich glaube nicht, es ist eine gute Praxis, es zu tun auf diese Weise..
- Ist es möglich, laden Sie die neueste .csv-Datei Hinzugefügt, anstatt nur die neueste Datei im Allgemeinen?
- FTP sendet Passwörter in Klartext. SFTP ist sicherer (FTP über SSH, pip install pysftp), aber nicht so schnell als FTPS (FTP über SSL/TLS), was so einfach ist wie mit
ftplib.FTP_TLS()
stattftplib.FTP()
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie alle Termine in
Zeit.struct_time
(strptime
geben Sie in einer Liste alles, was Sie dann tun müssen, istsort
der Liste.Hier ein Beispiel :
Warum nutzen Sie nicht nächste option dir?
Mit dieser option wird die Datei mit der Auflistung der Zeit ist, bestellt vom neuesten zum ältesten. Dann einfach abrufen der ersten Datei in der Liste, um es herunterzuladen.
-t
Schalter ist proprietäre (und eigentlich gegen FTP-Spezifikation). Es ist zwar ziemlich weit verbreitet, es ist in keiner Weise universal. Siehe meine Antwort für einen link zu details.Für diejenigen, die für eine vollständige Lösung für das finden der aktuellsten Datei in einem Ordner:
MLSD
Wenn Ihr FTP-server dies unterstützt
MLSD
Befehl, die Lösung ist einfach:LISTE
Wenn Sie müssen verlassen sich auf veraltete
LIST
Befehl, Sie zu analysieren ist eine proprietäre Liste gibt es.Allgemeine *nix-Auflistung ist wie:
Einer Aufstellung wie dieser, dieser code wird:
Dies ist eine eher zerbrechliche Ansatz.
MDTM
Zuverlässigere, aber ein Weg, weniger effizient, ist die Verwendung
MDTM
Befehl zum abrufen der Zeitstempel der einzelnen Dateien/Ordner:Nicht-standard -t-Schalter
Einige FTP-Server unterstützen eine proprietäre nicht-standard -
-t
Schalter fürNLST
(oderLIST
) - Befehl.Sehen Wie man Dateien im FTP-Ordner, sortiert nach dem änderungsdatum.
Downloaden gefunden, Datei
Egal, was Ansatz, den Sie verwenden, wenn Sie die
latest_name
, laden Sie es wie jede andere Datei:Siehe auch
Ich weiß nicht, wie es Ihre ftp, aber dein Beispiel war nicht für mich arbeiten. Ich änderte einige Zeilen, die im Zusammenhang mit der Datum-Sortierung-Teil: