Seite 1 von 1

FTP.dir() in Datei schreiben

Verfasst: Donnerstag 5. April 2007, 15:52
von BoOnOdY
Hey, ich weiß, dass die Frage bestimmt doof ist, aber ich komm leider gerade net weiter.

Code: Alles auswählen

import ftplib
ftp=ftplib.FTP("1**.1**.3.***")
ftp.login("admin", "*****")
ftp.cwd("\\cdr\\checkout")
f=file("E:\AEP\\log.log","w")
f.writelines(ftp.dir())
f.close()


da bekomm ich immer den Fehler "writelines reuqires iterable argument "

Bin noch nicht so sehr bewandert in Python.


Kennt einer ein gutes Tutorial in dem man lernt Sachen in Dateien zu schreiben, auszulesen und auch zu vergleichen. Also ein bisschen ausführlicher, nicht so grob wie in den ganzen anderen tutorials.
Weil ich brauch das jetzt ziemlich ausführlich.

Gruß BoOnOdY

Verfasst: Donnerstag 5. April 2007, 16:19
von EnTeQuAk
Ich habe jetzt gar keine Erfahrung mit der FTPlib. Aber rein ausm Bauch heraus würde ich sagen, das ``ftp.dir()`` keine Liste/Tupel oder ein anderes iterierbares Objekt zurückgibt.

``f.writelines()`` benötigt aber ein iterierbares Objekt.

Nach ein wenig austesten hab ich folgendes verwunderliches herausbekommen:

Code: Alles auswählen

In [6]: type(ftp.dir())
-rw-r--r--   1 ente     ente         8478 Mar 13 16:22 Bussysteme-Dokuementation.zip
drwxr-xr-x   5 ente     ente         4096 Mar 10 10:47 development
drwxr-xr-x   4 ente     ente         4096 Mar 20 17:08 entes-world
drwxr-xr-x   2 ente     ente         4096 Mar 11 16:42 public_html
drwxr-xr-x  12 ente     ente         4096 Apr  4 11:11 trac
Out[6]: <type 'NoneType'>

Sorry, jetz bin ich auch ein wenig überrascht.

würde mich ma interessieren ;)

Verfasst: Donnerstag 5. April 2007, 16:26
von Y0Gi
Richtig, FTP.dir() gibt ("fast immer") ein UNIX-Verzeichnislisting als String zurück.

Folgendes habe ich irgendwo im ASPN-Cookbook gefunden und für sehr nützlich befunden (insbesondere die Verwendung von .split() ist sehr interessant):

Code: Alles auswählen

def parse_line(line):
    """Callback-Funktion zum Verarbeiten der Zeilen."""
    columns = line.split(None, 8)
    print columns

ftp.retrlines('LIST', parse_line)

Verfasst: Donnerstag 5. April 2007, 16:31
von gerold
EnTeQuAk hat geschrieben:Sorry, jetz bin ich auch ein wenig überrascht.
Hi EnTeQuAk!

Lies dir noch mal den FTP-Teil in der Python-Dokumentation durch. ;-)
Die meisten FTP-Funktionen, die etwas vom FTP-Server holen, erwarten eine Funktion, an die sie beim Empfangen als ersten Parameter den empfangenen Text übergeben können.

``dir()`` schreibt den Ordnerinhalt nach ``stdout``, wenn diese Funktion nicht angegeben ist.

Hier ein Beispiel:

Code: Alles auswählen

>>> import ftplib
>>> ftp = ftplib.FTP(host='ftp.suse.com', user='anonymous')
>>> ret = []
>>> ftp.dir(ret.append)
>>> ret
['drwxr-xr-x    2 root     root         4096 May 26  2004 bin', 'drwxr-xr-x
2 root     root         4096 May 26  2004 dev', 'drwxr-xr-x    2 root     root
4096 Sep 10  2004 etc', 'drwxr-xr-x    2 root     root         4096 May 26
2004 lib', 'drwxr-xr-x    2 root     root         4096 Feb 13  2006 msgs', '
drwxr-xr-x    8 ftp      root         4096 Apr 04 23:12 pub', 'drwxr-xr-x    3
root     root         4096 May 26  2004 usr']
>>> ret = []
>>> ftp.retrlines("LIST", ret.append)
'226 Directory send OK.'
>>> ret
['drwxr-xr-x    2 root     root         4096 May 26  2004 bin', 'drwxr-xr-x
2 root     root         4096 May 26  2004 dev', 'drwxr-xr-x    2 root     root
4096 Sep 10  2004 etc', 'drwxr-xr-x    2 root     root         4096 May 26
2004 lib', 'drwxr-xr-x    2 root     root         4096 Feb 13  2006 msgs', '
drwxr-xr-x    8 ftp      root         4096 Apr 04 23:12 pub', 'drwxr-xr-x    3
root     root         4096 May 26  2004 usr']
>>> 
mfg
Gerold
:-)

Verfasst: Donnerstag 5. April 2007, 16:44
von EnTeQuAk
gerold hat geschrieben:
EnTeQuAk hat geschrieben:Sorry, jetz bin ich auch ein wenig überrascht.
Hi EnTeQuAk!

Lies dir noch mal den FTP-Teil in der Python-Dokumentation durch. ;-)
hi hi ;) Ich wusste es :) nächtes mal werde ich es machen, bevor ich versuche Hilfe zu geben :)
Die meisten FTP-Funktionen, die etwas vom FTP-Server holen, erwarten eine Funktion, an die sie beim Empfangen als ersten Parameter den empfangenen Text übergeben können.

``dir()`` schreibt den Ordnerinhalt nach ``stdout``, wenn diese Funktion nicht angegeben ist.
Das hab ich nun auch herausgefunden *grinz*

Gut, bin still... ich höre, das ser Threadersteller etwas sagen möchte :)

Verfasst: Donnerstag 5. April 2007, 16:45
von BoOnOdY
ich bin momentan noch überwältigt ;)

aber ich bin gerade ma am austesten