Hallo, kann man mit "ftplib" auch Variablen uploaden?
Also ich habe eine Variable die eine Liste beinhaltet.
Bisher hat es nur mit Dateien funktioniert, leider finde ich nichts dazu.
ftplip Variablen uploaden
Nein. FTP heisst ja "file transfer protocol". Das kann nur Dateien. Was man natuerlich tun koennte waere die Daten die man irgendwohin speichern will in eine Datei zu speichern, und DIE kann man dann per FTP irgendwohin laden. Und man kann ein io.StringIO-Objekt benutzen statt einer echten Datei. Das ist sauberer. Und mit zB dem json-Modul kann man die Liste in eine Datei ueberfuehren, und aus ihr wieder die Liste gewinnen.
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@egon11: Du musst als erstes ein entsprechendes dateiähnliches Objekt aus `io` erstellen, wobei ich da nicht `StringIO` verwenden würde, sondern `BytesIO`, und dann die Liste irgendwie dort rein serialisieren wie in eine normale Datei. Da kannst Du ja auch nicht einfach eine Liste rein schreiben. Vorgeschlagen wurde von __deets__ JSON als Format. Da hat Python das `json`-Modul in der Standardbibliothek.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Wenn ich mit `ftlip` eine Datei auslese, muss sie ja "read()" fähig sein zeigt mir die Ausgabe an.
Jetzt habe ich mal das Beispiel io.StringIO() getestet, Ergebnis ist, es printet nichts.
Jetzt habe ich mal das Beispiel io.StringIO() getestet, Ergebnis ist, es printet nichts.
Code: Alles auswählen
import io
output = io.StringIO()
output.write('First line.\n')
print('Second line.', output)
contents = output.getvalue()
output.close()
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@egon11: Also bei mir wird wie erwartet folgendes ausgegeben:
Wenig sinnvoll, aber es wird etwas ausgegeben. Und der Code macht auch gar nichts mit `contents` – warum?
Code: Alles auswählen
Second line. <_io.StringIO object at 0x7f2a19656e58>
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Bis jetzt habe ich das versucht:
gibt mir nichts aus.
Code: Alles auswählen
import json
from io import StringIO
io = StringIO()
a = ["1"]
b = json.dump(a, io)
print(io.read())
Nach dem Schreiben ist auch der Filepointer am Ende der Datei.
Wie aber schon __blackjack__ geschrieben hat, ist es besser, `BytesIO` zu verwenden:
Code: Alles auswählen
import json
from io import StringIO
data = StringIO()
a = ["1"]
b = json.dump(a, data)
data.seek(0)
print(data.read())
Code: Alles auswählen
contents = json.dumps(a)
data = io.BytesIO(contents.encode('utf8'))
Ich habe das schon oft gesagt, und ich sage es wieder: wenn du solche Fragen stellst, dann zeig. uns. den. Code. Niemand hier kann erraten, was du da gebastelt hast.
So geht es, ohne ftp in the mix, weil ich keinen FTP-Server habe:
So geht es, ohne ftp in the mix, weil ich keinen FTP-Server habe:
Code: Alles auswählen
import io
import json
TEMP_FILE_NAME = "/tmp/foobar.dat"
def main():
data = [1, 2, 3]
output_file = io.BytesIO(json.dumps(data).encode("utf-8"))
# simulate writing /reading file via ftp
with open(TEMP_FILE_NAME, "wb") as outf:
outf.write(output_file.read())
with open(TEMP_FILE_NAME, "rb") as inf:
data_from_file = json.load(inf)
assert data == data_from_file
if __name__ == '__main__':
main()