In Python 2 dieser Code ist, was würde ich erwarten:Python 3 csv.writer prints "Bytes" mit dem Präfix und zitiert
import csv
import sys
writer = csv.writer(sys.stdout)
writer.writerow([u'hello', b'world'])
Er druckt:
hello,world
Aber in Python 3, bytes
werden mit einem Präfix gedruckt und zitiert:
hello,b'world'
da CSV ein generisches Datenaustauschformat ist, und da kein anderes System Als Python weiß, was b''
ist, muss ich dieses Verhalten deaktivieren. Aber ich habe nicht herausgefunden, wie.
Natürlich könnte ich zuerst str.decode
auf allen bytes
verwenden, aber das ist unbequem und ineffizient. Was ich wirklich will, ist entweder die Literal Bytes in die Datei zu schreiben, oder eine Codierung (z. B. 'ASCII') an csv.writer()
übergeben, so dass es weiß, wie bytes
Objekte, die es sieht, zu dekodieren.
Bytes Strings und Unicode Strings sind zwei verschiedene Arten in Python 2. Python 2 erlaubt nur die implizite Konvertierung mit dem Standard-Ascii-Codec. –
@Mark: Danke ... Antwort aktualisiert entsprechend. – martineau