Seite 1 von 1

.csv Datei decodieren base64

Verfasst: Donnerstag 24. Januar 2019, 13:31
von Kirikkayis
Moin,

ich melde mich mal wieder zu Wort.

Folgendes habe ich vor:

Ich möchte eine codierte csv-Datei dekodieren (von mir aus direkt in der csv-Datei)

folgendes habe ich probiert:

Code: Alles auswählen

import base64



with open("decode.csv", "r") as f:
    data = f.read()

    for line in f:
        data = base64.b64decode(f)
        print(data)


Liefert leider gar nichts.

Sieht wer den Fehler bzw. jemand eine Lösung parat ?

Freue mich auf jede Antwort.

Re: .csv Datei decodieren base64

Verfasst: Donnerstag 24. Januar 2019, 13:46
von Sirius3
Du liest erst mit read die gesamte Datei. Danach ist der Filepointer am Ende der Datei, weitere Leseversuche gehen daher nicht mehr und die Schleife wird nie betreten. Lösch die Zeile mit `read`, wenn Du eine Datei hast, die zeilenweise Base64-Codiert ist. Dekodier die gesamte Datei auf einmal, wenn es sich um ein codiertes Stück handelt. In keinem der Fälle ist das eine csv-Datei, denn eine csv-Datei enthält Text-Daten, Du hast aber scheinbar base64-codierte Binärdaten.

Re: .csv Datei decodieren base64

Verfasst: Donnerstag 24. Januar 2019, 13:48
von __blackjack__
@Kirikkayis: Du liest vor der Schleife den kompletten Inhalt der Datei ein und damit hat die Schleife dann nichts mehr zu lesen. Und mit dem vorher eingelesenen Inhalt machst Du nirgends etwas.

Zudem erwartet `base64.decode()` ziemlich sicher kein Dateiobjekt als Argument sondern eine Zeichenkette.

Re: .csv Datei decodieren base64

Verfasst: Donnerstag 24. Januar 2019, 14:27
von Kirikkayis
Jo, danke habe ich zur Kenntnis genommen.

Sieht jetzt nun so aus:

Code: Alles auswählen

import base64
import csv
import json

with open('decode.csv') as f:
    reader = csv.reader(f)
    for row in f:
        x = base64.b64decode(row)
        print(x)
   print(type(x))
        with open("D:\\data.txt", "wb") as f:
            f.write(x)   
Output:
.
.
.
.
.
text in der Datei
text in der Datei
<class 'str'>

Problematik:

Ich bekomme in meine data.txt NUR die allerletzte Zeile geschrieben.

Was muss ich ändern? :D ich komm leider gar nicht klar

Re: .csv Datei decodieren base64

Verfasst: Donnerstag 24. Januar 2019, 14:28
von Kirikkayis
Ah, das decodieren funktioniert einwandfrei.
Das einzige Problem ist wirklich nur noch das ich nicht die gesamte Decodierung erhalte sondern nur die aller letzte Zeile.

Re: .csv Datei decodieren base64

Verfasst: Donnerstag 24. Januar 2019, 14:39
von __blackjack__
@Kirikkayis: Du überschreibst halt immer wieder die Datei mit jeder Zeile, so das am Ende dann nur noch die letzte enthalten ist. Öffne die Datei nur *einmal* und nicht für jede zu schreibende Zeile.

Wobei der `csv.reader()` hier überhaupt keinen Sinn macht. Würde die Eingabedatei *wirklich* CSV-Daten enthalten, würde das Programm nicht funktionieren. Du hast da anscheinend tatsächlich nur eine normale Textdatei bei der sich jede Zeile einzeln als Base64 dekodieren lässt. Ob das Zufall ist, kann man so nicht sagen, ich vermute es aber stark.

Der Typ von `x` sollte übrigens nicht `str` sein, es sei denn Du verwendest noch Python 2‽

Edit: Vielleicht möchtest Du an der Stelle auch lieber `base64.decode()` verwenden‽