Seite 1 von 1
HTML von FTP downloaden, bearbeiten und uploaden
Verfasst: Sonntag 13. Dezember 2009, 20:56
von axle
Hi,
ich habe vor eine Homepage per Skript bearbeiten zu lassen (sozusagen wie ein Blog). Dazu muss ich auf einen FTP-Server connecten, die Datei runterladen, sie bearbeiten und dann wieder hochladen. Hier mein Code bisher:
Code: Alles auswählen
from ftplib import FTP
from os import remove
ftp = FTP("server-domain")
ftp.login("user", "pass")
datei=open("index.html", "w+")
ftp.retrlines("RETR index.html", datei.writelines)
print datei #nur zum Test
ftp.delete("index.html")
ftp.storlines("STOR index.html", datei)
ftp.quit()
datei.close()
remove("index.html")
Die Datei wird auch runter und wieder hoch geladen, nur wird wohl ein Teil vorne und ein Teil hinten gelöscht, die Datei fängt dann mitten im Header an :-S. Dadurch sieht man einen Teil des Headers auf der Website... Vielleicht kann mir jemand helfen, wäre toll!
axle
Verfasst: Montag 14. Dezember 2009, 13:33
von jerch
Benutzt Du Windows? Vllt. hilft Dir der binary-Modus weiter, obwohl der Text-Modus nicht ganze Teile von Dateien "verschlucken" sollte, zumal es ja auch noch Textdateien sind.
Zum Ausprobieren:
Code: Alles auswählen
...
#ftp.retrlines("RETR index.html", datei.writelines)
ftp.retrbinary('RETR index.html', datei.write)
...
#ftp.storlines("STOR index.html", datei)
ftp.storbinary("STOR index.html", datei)
Verfasst: Montag 14. Dezember 2009, 13:45
von axle
Das hab ich zwar glaub' ich schon probiert, aber nochmal kann nie schaden... ;)
Muss ich nicht dann auch die Datei mit "w+b" öffnen? Um binär schreiben zu können?
Verfasst: Montag 14. Dezember 2009, 13:55
von axle
OK, hab das mal laufen lassen...
Wenn ich nur die ftp.* Anweisungen ersetze, besteht die Datei die hochgeladen wurde so ziemlich nur noch aus "NUL NUL NUL NUL ..."
Wenn ich die Datei mit "w+b" öffne, auch :D.
Das kann doch irgendwie nicht sein. Achja, ja, ich benutz Windows dazu.
Neuer Code:
Code: Alles auswählen
from ftplib import FTP
from os import remove
ftp = FTP("host")
ftp.login("user", "pass")
datei=open("index.html", "w+b")
#~ ftp.retrlines("RETR index.html", datei.writelines)
ftp.retrbinary('RETR index.html', datei.write)
ftp.delete("index.html")
#~ ftp.storlines("STOR index.html", datei)
ftp.storbinary('STOR index.html', datei)
ftp.quit()
datei.close()
remove("index.html")
Verfasst: Montag 14. Dezember 2009, 13:55
von jerch
axle hat geschrieben:...
Muss ich nicht dann auch die Datei mit "w+b" öffnen? Um binär schreiben zu können?
Ja genau.
Ich kann mir auch nicht vorstellen, dass es daran liegen soll, ist die Datei denn im Editor, also nach dem Runterladen via FTP noch intakt?
edit:
Hm, wie hast Du die Datei zum Lesen geöffnet?
Verfasst: Montag 14. Dezember 2009, 13:59
von axle
Mit:
Siehe Code im Post davor...
Verfasst: Montag 14. Dezember 2009, 13:59
von jerch
Hui, hier passiert was ganz anderes

Schliesse die Datei doch mal und öffne sie explizit zum Lesen neu.
(Hinweis: Dateien haben einen Cursor, d.h. read() und write() arbeiten ab der aktuellen Cursorposition

)
Cursorposition kannst Du mit file.tell() auslesen und mit file.seek() setzen.
Ich hab Deinen Code nicht wörtlich genug genommen, aber die Curorsache dürfte die Ursache Deines Problems sein.
Verfasst: Montag 14. Dezember 2009, 14:19
von axle
Du hattest recht... Jetzt gehts wunderbar :)
Dankeschön!
Ich werd jetzt mal anfangen, den Code zum Bearbeiten einzubauen, wahrscheinlich brauch ich da nochmal Hilfe ;).
Re: HTML von FTP downloaden, bearbeiten und uploaden
Verfasst: Sonntag 15. August 2010, 14:32
von Mathmos
Hallo
ich versuche auch gerade eine datei herunterzuladen und zu bearbeiten udn wieder hochzuladen.
allerdings habe ich ein problem mit dem bearbeiten und dann wieder hoch laden.
Fehlermeldung:
Code: Alles auswählen
from ftplib import FTP
from os import remove
ftp = FTP("------")
ftp.login("------", "--------")
datei=open("index.html", "w+b")
ftp.retrbinary('RETR index.html', datei.write)
datei.close()
datei=open("index.html", "r+b")
bearbeitet = datei.read().replace("Wir sind umgezogen", "Wir ziehen doch nicht um")
ftp.delete("index.html")
ftp.storbinary('STOR index.html', bearbeitet)
ftp.quit()
datei.close()
remove("index.html")
Re: HTML von FTP downloaden, bearbeiten und uploaden
Verfasst: Sonntag 15. August 2010, 14:40
von BlackJack
@Mathmos: Bei Tracebacks bitte immer den *gesamten* Traceback zeigen, damit man nicht raten muss *wo* die Ausnahme aufgetreten ist.
Du übergibst `bearbeitet` an `ftp.storbinary()`. Schau mal was `bearbeitet` für ein Datentyp ist und was die Funktion an der Stelle erwartet.