Seite 1 von 1

rätselhafter ftp-upload

Verfasst: Freitag 14. Dezember 2018, 21:29
von DB7WN
Hallo allerseits!
Ich versuche eine einfache Textdatei mit ein paar Zeilen Python-Code in einen Webspace hochzuladen. Die Textdatei "1.txt" besteht zunächst mal aus zwei Zeilen, erstellt mit dem Windows10 Editor.
Dieser Code, den ich für diese Aufgabe im Netz vielfach gefunden habe, liefert mir eine Fehlermeldung.

Code: Alles auswählen

import ftplib
ftp = ftplib.FTP(host,username, passwort)
ftp.cwd("/")
file = open("1.txt","r")
ftp.storlines("STOR 1.txt", file) 
ftp.quit()
file.close()
Fehlermeldung u.a. :

File "z:\HTML\ftp\upload-ftp.py", line 9, in <module>
ftp.storlines("STOR 1.txt", file)
File "C:\Python36-32\lib\ftplib.py", line 538, in storlines
if buf[-1] in B_CRLF: buf = buf[:-1]
TypeError: a bytes-like object is required, not 'str'

Das sieht für mich so aus, als dass eine Binärdatei erwartet wird. Wieso das?
Im Zielverzeichnis ist dann eine Datei "1.txt" vorhanden, aber ohne Inhalt.

Wenn ich den Code ändere in "ftp.storbinary..." funktioniert alles.
Hat jemand dafür eine Erklärung - nur zum Wissen. Wie gesagt, 'irgendwie' funktionierts ja.

Re: rätselhafter ftp-upload

Verfasst: Freitag 14. Dezember 2018, 22:58
von ThomasL
probier mal
file = open("1.txt","rb")

Re: rätselhafter ftp-upload

Verfasst: Samstag 15. Dezember 2018, 00:08
von DB7WN
Oh,das geht.
file = open("1.txt","rb")
ftp.storlines("STOR 1.txt", file)

Wie passt daszusammen? Das wirft das den Haufen, was ich geglaubt hatte zu wissen.
Warum steht das überall anders?

Re: rätselhafter ftp-upload

Verfasst: Samstag 15. Dezember 2018, 07:09
von snafu
DB7WN hat geschrieben: Samstag 15. Dezember 2018, 00:08 Warum steht das überall anders?
Wo steht das denn anders? Die Doku von storlines() sagt jedenfalls, dass eine Datei im Binärmodus erwartet wird.

Re: rätselhafter ftp-upload

Verfasst: Samstag 15. Dezember 2018, 11:25
von __blackjack__
@snafu: Unter Python 2 ist das nicht zwingend notwendig und auch nicht dokumentiert. Weil `readline()` dort auch bei Dateien, welche im Textmodus geöffnet werden, ”Bytestrings” statt Unicode-Strings liefert.

Re: rätselhafter ftp-upload

Verfasst: Sonntag 16. Dezember 2018, 22:15
von DB7WN
Gut, dass es "überall" anders steht, ist wohl nicht ganz korrekt, aber:
hier (https://pythonspot.com/ftp-client-in-python/ - im Abschnitt "Uploadung files") werden Dateien des Typs ".txt", ".htm",".html"
mit "ftp.storlines" hochgeladen und die Datei ohne "rb" geöffnet.

Hier (https://gist.github.com/slok/1447559) wird die Datei nur mit 'r' geöffnet und je nach Dateityp mit
"ftp.storlines" oder auch "ftp.storbinary" hochgeladen.

Hier (https://www.atlantic.net/hipaa-complian ... ds-python/) wird die Datei vom Typ ".txt" mit 'r' geöffnet und mit
"ftp.storlines" hochgeladen.

Hier steht der Code, den ich für mich der Einfachheit halber versuchsweise mal rauskopiert habe, und der nicht funktioniert.
(Datei öffnen mit 'r', uploaden mit "ftp.storlines".

Letztendlich ist es für mich ausreichend, die Methode so benutzen zu können, dass sie funktioniert, ohne alles ganz genau zu verstehen.
Danke für die Hinweise.

Re: rätselhafter ftp-upload

Verfasst: Sonntag 16. Dezember 2018, 22:52
von __blackjack__
@DB7WN: Der erste und der dritte Link sind Python 2, und der zweite sehr wahrscheinlich auch, denn sonst würde das ja so nicht funktionieren.

Re: rätselhafter ftp-upload

Verfasst: Sonntag 16. Dezember 2018, 23:32
von DB7WN
__blackjack__ hat geschrieben: Sonntag 16. Dezember 2018, 22:52 @DB7WN: Der erste und der dritte Link sind Python 2, und der zweite sehr wahrscheinlich auch, denn sonst würde das ja so nicht funktionieren.
o.k. darüber bin ich schon öfter gestolpert. Ich muss wohl besser prüfen, welche Version beschrieben wird. Beim vierten habe ich vergessen den link einzutragen, aber das wird dann wohl genau so sein.