2017-02-06 3 views
0

Ich versuche, Zeichen mit Doppelpunkten (Umlaute) wie ä, ö und Ö zu schreiben. Ich kann es in die Datei mit data.encode("utf-8") schreiben, aber das Ergebnis b'\xc3\xa4\xc3\xa4\xc3\x96' ist nicht nett (UTF-8 als Literalzeichen). Ich möchte "ääÖ" wie geschrieben in eine Datei gespeichert erhalten.Schreiben von CSV-Dateien mit Umlauten, die "UnicodeEncodeError: 'ascii' Codec verursachen, kann das Zeichen nicht codieren"

Wie kann ich Daten mit Umlautzeichen in eine CSV-Datei in Python 3 schreiben?

import csv 
data="ääÖ" 
with open("test.csv", "w") as fp: 
    a = csv.writer(fp, delimiter=";") 
    data=resultFile 
    a.writerows(data) 

Traceback:

File "<ipython-input-280-73b1f615929e>", line 5, in <module> 
    a.writerows(data) 
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 15: ordinal not in range(128) 
+2

Hilft es, die Datei mit 'encoding = 'utf-8'' zu öffnen? – languitar

+0

versuche hinzuzufügen: '#!/Usr/bin/env python # - * - Codierung: utf-8 - * -' siehe [Antwort] (http://stackoverflow.com/questions/6289474/working-with -utf-8-Codierung-in-Python-Quelle) –

+0

@languitar nein, hat es nicht. – hhh

Antwort

1

hinzufügen Parameter encoding zum open() und setzen Sie ihn auf 'utf8'.

import csv 

data = "ääÖ" 
with open("test.csv", 'w', encoding='utf8') as fp: 
    a = csv.writer(fp, delimiter=";") 
    a.writerows(data) 

Edit: Entfernt die Verwendung von io Bibliothek als open ist die gleiche wie io.open in Python 3.

+0

Sie können die Kodierung auch in 'open' setzen – Arman

+1

In Python 3 sind' open' und 'io.open' genau dasselbe. Nur in Python 2 unterscheiden sie sich (wobei "io.open" sich wie Python 3 "offen" verhält). – ShadowRanger

+0

Diese Lösung funktioniert mit Python3 auf meinem OSX, gibt aber den Fehler mit Python2.7. Der Fehler liegt in der Zeile, wenn Daten vor dem Aufruf zum Öffnen und der Angabe der Codierung gesetzt werden. –

-1

Diese Lösung sowohl python2 funktionieren sollte und 3 (nicht in python3 erforderlich):

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import csv 
data="ääÖ" 
with open("test.csv", "w") as fp: 
    a = csv.writer(fp, delimiter=";") 
    a.writerows(data) 

Credits: Working with utf-8 encoding in Python source

Verwandte Themen