Seite 1 von 1
FTPlib daten übernehmen aus einem Befehl in eine Variable
Verfasst: Sonntag 16. November 2003, 22:30
von Keanuf
Guten Abend,
ich bein neu hier und will mich mal jurz vorstellen.
Bin erst kurz mit Python unterwegs, hatte davor ein bisschen Perl und PHP gemacht gehabt.
So nun zu meinen Problem:
Ich möchte gerne über FTP das Verzeichnis auslesen und es in eine Variable (List) direkt reinbringen, damit ich diese dann im Skript weiter bearbeiten kann.
Hier mal ein bisschen Code
Code: Alles auswählen
from ftplib import FTP
ftp = FTP('blblblblblblblblblb')
ftp.login('user', 'password')
print ftp.getwelcome()
for zeile in ( ftp.retrlines('LIST') ):
dir = [zeile]
ftp.quit()
Also Conecten tut er, aber ich kriege einfach nicht die im Verzeichnis angezeigten Dateien Verzeichnisse, direkt in eine Liste.
Hoffe mir kann jemand weiterhelfen.
Danke im vorraus.
Ich habe auch schon versucht die Dokus in englisch zu lesen, aber da habe ich einfach nichts gefunden, was mir wirklich weiterhelfen könnte.
ich weis nur, das der Befehl ftp.retrlines('LIST') die Standard Asugabe auf der Konsole macht, villeicht kann man darüber die Daten in die Liste kriegen.
Re: FTPlib daten übernehmen aus einem Befehl in eine Variabl
Verfasst: Montag 17. November 2003, 00:05
von oenone
Keanuf hat geschrieben:[...]
Hier mal ein bisschen Code
Code: Alles auswählen
from ftplib import FTP
ftp = FTP('blblblblblblblblblb')
ftp.login('user', 'password')
print ftp.getwelcome()
for zeile in ( ftp.retrlines('LIST') ):
dir = [zeile]
ftp.quit()
[...]
ich weis nur, das der Befehl ftp.retrlines('LIST') die Standard Asugabe auf der Konsole macht, villeicht kann man darüber die Daten in die Liste kriegen.
mit
nlst(self, *args) bekommst du eine liste der dateien... wenn args fehlt, wird das aktuelle dir ausgegeben.
bsp:
Code: Alles auswählen
from ftplib import FTP
ftp = FTP('blblblblblblblblblb')
ftp.login('user', 'password')
print ftp.getwelcome()
dir = ftp.nlst()
ftp.quit()
zum anderen stoert mich die zeile
dir = [zeile]
was willst du damit erreichen ? den wert von zeile in eine liste dir eintragen ?
das muesstest du so machen:
vorher dir=[] und dann einen eintrag hinzufuegen:
dir.append(zeile) oder
dir += zeile, wobei das erstere zu bevorzugen ist.
weiterhin solltest du keine variable namens 'dir' benutzen, da das schon der name einer builtin funktion ist und du diese damit ueberschreibst
auf bald
oenone
Verfasst: Montag 17. November 2003, 06:35
von Keanuf
Owei Owei, soviele Fehler habe ich gemacht in sowenig Zeilen, man oh man, da sieht man mal das ich wirklich noch ganz am Anfang stehe
.
Ich danke dir, ich werde das dann mal heute ausprobieren.
Und danke für die zügige Antwort.
ich sitze hier mit 2 Büchern und einer Online Doku, aber aus Fehlern lernt man
.
Nachtrag:
habe es doch gleich ausprobiert
.
Und siehe da es funktioniert und wie super.
Na da kann ich ja anfangen meine nächsten Fehler zu machen.
Man sieht sich
Verfasst: Dienstag 18. November 2003, 21:38
von Keanuf
Hi um nochmal auf das FTP Objekt einzugehen.
Hier noch ein Frage
ich bekomme nun die Dateien.
mit diesem Befehl
Jetzt möchte ich aber auch noch das Erstell Datum auf dem FTP Server der Dateien dazu haben.
Dazu gibt es den Befehl:
Doch leider gitb dieser seine Ausgabe nur auf dem Prompt ( Bash)
aus.
Gitb es da eventuell im Objekt noch einen anderen Befehl ?? Damit ich die 2 Werte in eine Liste direkt speichern kann ?? Habe zwar mit help(ftplib) versucht was zu finden, aber ich konnte nichts finden
.
Oder muss ich die Ausgabe auf der Bash umleiten, wenn ja dann wie ???
Ich danke alle denen die mir bei meinem Problem weiterhelfen.
Verfasst: Dienstag 18. November 2003, 22:33
von oenone
nicht help(ftplib) sondern help(ftplib.FTP) haette dir weitergeholfen...
oder in dem fall von "from ftplib import FTP" waere auch help(FTP) gegangen.
da gibt es dann folgende zeilen:
Code: Alles auswählen
| retrlines(self, cmd, callback=None)
| Retrieve data in line mode.
| The argument is a RETR or LIST command.
| The callback function (2nd argument) is called for each line,
| with trailing CRLF stripped. This creates a new port for you.
| print_line() is the default callback.
du kannst also als parameter eine funktion angeben, die es dir dann in deine liste schreibt.
auf bald
oenone
Verfasst: Dienstag 18. November 2003, 23:35
von Keanuf
Kannst du mir da ungefähr mal ein Beispiel sagen.
Ich bin nämlich daraus nicht richtig schlau geworden.
Das hatte ich nämlich auch, gefunden.
Danke dir schon für deine mühe.
Nur mal so als Beispiel ich bau eine funktion.
mit
def function blabla ():
meinelist.append(??????)
in der ich dann die werte in die Liste meineliste [] schreibe oder ???
Aber welchen Variable oder wie greif ich denn auf die Daten zu ??
Bitte nimm mal den Progamm code nicht zu genau, das muss ich halt noch lernen.
Aber ich will ja nur verstehen, wie ich die Daten da reinkrieg
Nochmals Danke für deine mühen, und wenn ich mal fragen darf, wei lange arbeitest du denn schon mit Python ??
Verfasst: Mittwoch 19. November 2003, 07:44
von inchie
Verfasst: Mittwoch 19. November 2003, 19:26
von oenone
ja, z.b. so...
oder auch mit einer funktion, mit der du es gleich aufsplitten kannst...
die funktion muss natuerlich einen parameter annehmen, in den retrlines() den string uebergeben kann.
z.b. so:
Code: Alles auswählen
b=[]
def eintrag(x):
tmp = x.split(' ') // und noch mehr manipulationen, wie du willst.
b.append(tmp)
auf bald
oenone
Verfasst: Donnerstag 20. November 2003, 06:23
von Keanuf
Danke euch beiden nochmal.
Es funktioniert.
Nur damit ich das vestehe
sonst muss ich das auch mal bei anderen Modulen nachfragen
.
Also
bis hierhin ist mir klar, das ich ein Befehl vom FTP Objekt ausführe und nun die Vermutungen.
Sagt der funktion, das die ausgabe in den String x zu schreiben sind ??? die dann
an meine funktion eintrag den Wert x weitergibt, in der es dann verabeitet wird.
Ich hoffe ich habe das nun verstanden
Noch eine schöne Woche
Verfasst: Donnerstag 20. November 2003, 13:56
von Dookie
Hi Keanuf,
lambda ist eine "anonyme" Funktion. Das soll heissen, eine Funktion ohne Namen. In dem konkreten Beispiel bedeutet
lambda x: das hier eine Funktion mit einem Parameter (hier x, könnte auch mauseschwaenzchen heissen) verwendet wird.
Im Beispiel von inchie könnte mann das
auch so schreiben:
Code: Alles auswählen
w=[]
def eintragx(x):
w.append(x)
ftp.retrlines('LIST',eintragx)
Das lambda ersetzt praktisch die Funktion eintragx.
Gruß
Dookie
Verfasst: Donnerstag 20. November 2003, 22:26
von Keanuf
Danke habe es nun verstanden.
Man hört von einander