2017-11-02 1 views
1

Nehmen wir an, dass ich schreiben und dann in einer CSV in Python eine Liste von Strings mit polnischen Wörter lesen 3.6:Schreiben/Lesen von Sonderzeichen aus CSV (Python 3.6)

lista=['szczęśliwy','jabłko','słoń','kot'] 

Da es nicht möglich ist, Unicode Zeichen in der CSV zu schreiben, kodieren ich die Saiten zu utf-8, so Daten wie diese in der Datei (alle innerhalb der ersten CSV-Zelle) gespeichert werden:

b'szcz\xc4\x99\xc5\x9bliwy',b'jab\xc5\x82ko',b's\xc5\x82o\xc5\x84',b'kot' 

Aber ich Ich kann die Daten nicht entschlüsseln m die output.csv Datei mit diesem Code:

with open('output.csv') as csvarchive: 
    entrada = csv.reader(csvarchive) 
    for reg in entrada: 
     lista2=reg 

print(lista2) 
["b'szcz\\xc4\\x99\\xc5\\x9bliwy'", "b'jab\\xc5\\x82ko'", "b's\\xc5\\x82o\\xc5\\x84'", "b'kot'"] 

lista2 ist noch eine Liste von Strings, aber mit der utf-8 Kodifizierung und ich bin nicht in der Lage, die Sonderzeichen zu erholen.

Ich versuchte verschiedene Dinge wie das Lesen der Datei in 'rb' Modus, Codierung und Decodierung wieder ... Aber da ich neu in diesen Angelegenheiten bin, habe ich es nicht geschafft. Es muss eine sehr einfache Lösung haben.

+0

Macht es einen Unterschied, wenn Sie die Codierung explizit im 'open'-Aufruf angeben? ZB 'open ('output.csv', encoding = 'utf8')'? –

+1

* "Da ist es nicht möglich, Unicode-Zeichen in der .csv zu schreiben" * Das ist Blödsinn. Wer hat dir das gesagt? – Tomalak

+0

@Tomalak Wie speichern Sie Unicode-Objekte in einer Datei, ohne sie zu kodieren? –

Antwort

5
  1. Öffnen Sie niemals Textdateien, ohne eine Codierung anzugeben (dies ist im Allgemeinen richtig).
  2. Immer offen CSV-Dateien mit newline='' (dies gilt für den Python csv Modul)

Also, Ihre CSV-Datei unter der Annahme, UTF-8-codiert, zu verwenden:

with open('output.csv', 'r', encoding='UTF-8', newline='') as csvarchive: 
    entrada = csv.reader(csvarchive) 
    for reg in entrada: 
     # do something with the data row, it's already decoded 

Gleiches gilt für Schreiben der Datei:

with open('output.csv', 'w', encoding='UTF-8', newline='') as csvarchive: 
    writer = csv.writer(csvarchive) 
    # write data to the writer, it will be encoded automatically 

Es ist keine manuelle String-Codierung erforderlich. Schreiben Sie Zeichenfolgenwerte in den csv Writer, die Dateicodierung wird transparent erfolgen.

+1

Dies ist hier die Schönheit von Python 3 Behandlung von Unicode. Geben Sie die Kodierung einmal an und vergessen Sie sie dann. –

+1

Lektion gelernt. Ich denke, ich muss mich mit all diesen Dingen vertraut machen. Vielen Dank Tomalak. – Pacullamen