FTPlib daten übernehmen aus einem Befehl in eine Variable

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Keanuf
User
Beiträge: 39
Registriert: Freitag 3. Oktober 2003, 00:03
Kontaktdaten:

Sonntag 16. November 2003, 22:30

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. :lol:
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

Montag 17. November 2003, 00:05

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. :lol:
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
Keanuf
User
Beiträge: 39
Registriert: Freitag 3. Oktober 2003, 00:03
Kontaktdaten:

Montag 17. November 2003, 06:35

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 :oops: :lol: .

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 :lol: .

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 ;)
Keanuf
User
Beiträge: 39
Registriert: Freitag 3. Oktober 2003, 00:03
Kontaktdaten:

Dienstag 18. November 2003, 21:38

Hi um nochmal auf das FTP Objekt einzugehen.

Hier noch ein Frage ;)

ich bekomme nun die Dateien.

mit diesem Befehl

Code: Alles auswählen

ftp.nlst()
Jetzt möchte ich aber auch noch das Erstell Datum auf dem FTP Server der Dateien dazu haben.

Dazu gibt es den Befehl:

Code: Alles auswählen

ftp.retrlines('LIST')
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.
:wink:
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

Dienstag 18. November 2003, 22:33

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
Keanuf
User
Beiträge: 39
Registriert: Freitag 3. Oktober 2003, 00:03
Kontaktdaten:

Dienstag 18. November 2003, 23:35

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.
:roll:

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 ??

:roll:
inchie
User
Beiträge: 9
Registriert: Freitag 28. März 2003, 12:28

Mittwoch 19. November 2003, 07:44

Hi,
versuche mal

Code: Alles auswählen

w=[]
ftp.retrlines('LIST',lambda x : w.append(x))
Gruß
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

Mittwoch 19. November 2003, 19:26

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
Keanuf
User
Beiträge: 39
Registriert: Freitag 3. Oktober 2003, 00:03
Kontaktdaten:

Donnerstag 20. November 2003, 06:23

Danke euch beiden nochmal.
Es funktioniert.

Nur damit ich das vestehe :oops: sonst muss ich das auch mal bei anderen Modulen nachfragen :wink: .

Also

Code: Alles auswählen

ftp.retrlines ('LIST',

bis hierhin ist mir klar, das ich ein Befehl vom FTP Objekt ausführe und nun die Vermutungen.

Code: Alles auswählen

lambda x :

Sagt der funktion, das die ausgabe in den String x zu schreiben sind ??? die dann

Code: Alles auswählen

 eintrag(x))
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 :lol:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 20. November 2003, 13:56

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

Code: Alles auswählen

w=[]
ftp.retrlines('LIST',lambda x : w.append(x))
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
Keanuf
User
Beiträge: 39
Registriert: Freitag 3. Oktober 2003, 00:03
Kontaktdaten:

Donnerstag 20. November 2003, 22:26

Danke habe es nun verstanden.

Man hört von einander :lol:
Antworten