2017-01-20 4 views
2

Ich habe eine .csv Datei, die in UTF-8 codiert ist. Ich arbeite mit Python 2.7. Etwas passiert interesting auf Ubuntu. Wenn ich drucken, wie dies die Ergebnisse der Datei aus:Drucken Liste Elemente und Zeichenfolgen in Python haben unterschiedliche Ergebnisse

with open("file.csv", "r") as file: 
    myFile = csv.reader(file, delimiter = ",") 
    for row in myFile: 
     print row 

ich Zeichen wie \xc3\x, \xa1\, .... Beachten Sie, dass row eine Liste ist und alle Elemente in meiner Liste werden als Strings gekennzeichnet durch '' in der Ausgabe. Wenn ich drucken Sie die Ergebnisse wie folgt aus:

with open("file.csv", "r") as file: 
    myFile = csv.reader(file, delimiter = ",") 
    for row in myFile: 
     print ",".join(row) 

Alles wird dekodiert in Ordnung. Beachten Sie, dass hier jede Zeile aus meiner ursprünglichen Datei eine große Zeichenfolge ist.

Warum ist das?

+1

, die wahrscheinlich ist, weil, wenn Sie eine Liste wie folgt drucken: 'Druck [‚AAO‘]' Python wird die interne Codierung der Zeichenfolge zu halten, wie sie ist. Wenn Sie 'print ['åäö'] [0]' drucken, wird es versuchen, die Kodierung, die Sie am Anfang des Skripts definiert haben, zu dekodieren/verschlüsseln (normalerweise 7 oder 8 Bit ASCII)). – Torxed

+1

Auch 'join()' erwartet Strings. Strings und Bytes sind in Python 2.7 identisch. In Python 3 ist dies nicht der Fall, also vermute ich, dass Sie das nicht sehen würden. –

Antwort

1

Dies liegt daran, dass Python beim Drucken einer Liste repr() verwendet, aber beim Drucken einer Zeichenfolge str() verwendet. Beispiel:

unicode_str = 'åäö' 
unicode_str_list = [unicode_str, unicode_str] 
print 'unwrapped:', unicode_str 
print 'in list:', unicode_str_list 
print 'repr:', repr(unicode_str) 
print 'str:', str(unicode_str) 

Produziert:

unwrapped: åäö 
in list: ['\xc3\xa5\xc3\xa4\xc3\xb6', '\xc3\xa5\xc3\xa4\xc3\xb6'] 
repr: '\xc3\xa5\xc3\xa4\xc3\xb6' 
str: åäö 
Verwandte Themen