Seite 1 von 1

ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 15:29
von egon11
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.

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 15:44
von __deets__
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.

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 15:47
von egon11
Alles klar vielen Dank.

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 17:27
von egon11
Ich habe mir das mal mit dem io. modul angeschaut im howto, aber ich bekomme immer Fehler, wenn ich eine Liste im Parameter übergebe.

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 17:40
von __blackjack__
@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.

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 18:13
von egon11
Mit "json" muss ich quasi eine liste in read() convertieren?

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 18:36
von Sirius3
Ich verstehe Deine letzte Frage nicht. Was hat das mit `read` zu tun, wenn Du etwas schreiben willst?

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 19:24
von egon11
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.

Code: Alles auswählen

import io

output = io.StringIO()
output.write('First line.\n')
print('Second line.', output)

contents = output.getvalue()


output.close()

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 20:00
von __blackjack__
@egon11: Also bei mir wird wie erwartet folgendes ausgegeben:

Code: Alles auswählen

Second line. <_io.StringIO object at 0x7f2a19656e58>
Wenig sinnvoll, aber es wird etwas ausgegeben. Und der Code macht auch gar nichts mit `contents` – warum?

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 20:05
von egon11
Mh, bis jetzt bin ich ehrlich gesagt kein Stück weiter, ich dachte man kann eine Variable wie eine Datei behandeln.
Mit json habe ich es bis jetzt überhaupt nicht hinbekommen.

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 20:19
von __deets__
Dann zeig doch mal was du tust. Statt immer nur drüber zu reden.

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 20:25
von egon11
Bis jetzt habe ich das versucht:

Code: Alles auswählen

import json
from io import StringIO
io = StringIO()
a = ["1"]
b = json.dump(a, io)

print(io.read())
gibt mir nichts aus.

Re: ftplip Variablen uploaden

Verfasst: Mittwoch 4. September 2019, 20:31
von Sirius3
Nach dem Schreiben ist auch der Filepointer am Ende der Datei.

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())
Wie aber schon __blackjack__ geschrieben hat, ist es besser, `BytesIO` zu verwenden:

Code: Alles auswählen

contents = json.dumps(a)
data = io.BytesIO(contents.encode('utf8'))

Re: ftplip Variablen uploaden

Verfasst: Donnerstag 5. September 2019, 05:05
von egon11
Jetzt habe ich das so gemacht, aber es liest mir die liste "[]" mit ein. Bekomme ich das dann noch weg?

Re: ftplip Variablen uploaden

Verfasst: Donnerstag 5. September 2019, 05:40
von sparrow
Weißt du was json ist?
Zeit uns mit (mit deinem eingesetzten Code) was du tust, was das Ergebnis ist und was du für ein Ergebnis erwartest.

Re: ftplip Variablen uploaden

Verfasst: Donnerstag 5. September 2019, 09:43
von __deets__
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:

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()

Re: ftplip Variablen uploaden

Verfasst: Donnerstag 5. September 2019, 17:44
von egon11
Ok, genau das habe ich gesucht, vielen Dank.