Ich versuche, aus einem PyQt4 eine Textdatei im CSV-Format zu erstellen QTableWidget
. Ich möchte den Text mit einer UTF-8-Codierung schreiben, da er Sonderzeichen enthält. Ich benutze folgenden Code:
import codecs
...
myfile = codecs.open(filename, 'w','utf-8')
...
f = result.table.item(i,c).text()
myfile.write(f+";")
Es funktioniert so lange, bis die Zelle ein Sonderzeichen enthält. Ich habe es auch mit versucht
myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
Es hört aber auch auf, wenn ein Sonderzeichen erscheint. Ich habe keine Ahnung, was ich falsch mache.
myfile.write(u"%s"&f+";")
Antworten:
Von Ihrem Shell-Lauf:
Und (im Gegensatz zur ursprünglichen Frage) vorausgesetzt, Sie verwenden Pythons eingebautes
csv
Modul verwenden, verwandeln Sieimport csv
sichimport unicodecsv as csv
in Ihren Code.quelle
writer = csv.writer(out, dialect='excel', encoding='utf-8')
und den Datei-Handler mit erstellenopen(...
, nichtcodecs.open(...
.Es ist sehr einfach für Python 3.x ( docs ).
Informationen zu Python 2.x finden Sie hier .
quelle
writerow
kein utf-8 ist? wird es funktionieren?Verwenden Sie dieses Paket, es funktioniert einfach: https://github.com/jdunck/python-unicodecsv .
quelle
Für mich hat die
UnicodeWriter
Klasse aus der Python 2 CSV-Moduldokumentation nicht wirklich funktioniert, da sie das brichtcsv.writer.write_row()
Schnittstelle beschädigt.Beispielsweise:
funktioniert, während:
wird werfen
AttributeError: 'int' object has no attribute 'encode'
.Da
UnicodeWriter
offensichtlich erwartet wird, dass alle Spaltenwerte Zeichenfolgen sind, können wir die Werte selbst konvertieren und einfach das Standard-CSV-Modul verwenden:Oder wir können sogar csv_writer mit einem Affen-Patch versehen, um eine
write_utf8_row
Funktion hinzuzufügen - die Übung bleibt dem Leser überlassen.quelle
Die Beispiele in der Python-Dokumentation zeigen, wie Unicode-CSV-Dateien geschrieben werden: http://docs.python.org/2/library/csv.html#examples
(Der Code kann hier nicht kopiert werden, da er urheberrechtlich geschützt ist.)
quelle
Für python2 können Sie diesen Code verwenden, bevor
csv_writer.writerows(rows)
Dieser Code KEINE Ganzzahlen in utf-8-Zeichenfolgen konvertiert
quelle
Ein sehr einfacher Hack ist die Verwendung des JSON-Imports anstelle von CSV. Führen Sie beispielsweise anstelle von csv.writer Folgendes aus:
Grundsätzlich ist die json-formatierte Zeichenfolge angesichts der Liste der Felder in der richtigen Reihenfolge identisch mit einer CSV-Zeile, mit Ausnahme von [und] am Anfang bzw. Ende. Und json scheint in Python 2 gegenüber utf-8 robust zu sein. *
quelle