2016-06-23 2 views
-1

Ich versuche, eine Textdatei zu öffnen, zu drucken und zu lesen, die Sonderzeichen wie § enthält. Unten ist der Code, den ich verwende:Python readline funktioniert nicht mit Codecs

import codecs 
    f = codecs.open('sample_text.txt', mode='r', encoding='utf_8') 
    print f.readline() 

Die ersten beiden Zeilen funktionieren, aber die dritte nicht. Der Fehlercode sagt: Traceback (jüngste Aufforderung zuletzt):

"C:\Users\mallikk\Documents\Python Scripts\special_char_test.py", line 6, in <module> 
    print f.readline() 
    File "C:\Anaconda2\lib\codecs.py", line 690, in readline 
    return self.reader.readline(size) 
    File "C:\Anaconda2\lib\codecs.py", line 545, in readline 
    data = self.read(readsize, firstline=True) 
    File "C:\Anaconda2\lib\codecs.py", line 492, in read 
    newchars, decodedbytes = self.decode(data, self.errors) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa7 in position 13: invalid start byte 

Irgendwelche Ideen? Bitte lassen Sie mich wissen, wenn ich etwas klären oder weitere Details hinzufügen kann. Ich danke dir sehr!

+4

Diese Datei kodiert wird, nicht in UTF-8. Finden Sie die tatsächliche Codierung und verwenden Sie diese. – user2357112

+0

Ich glaube nicht, dass 0xa7 gültig utf8 ist. Bist du sicher, dass es in utf-8 ist? Warum verwenden Sie auch Codecs und nicht 'open'? – syntonym

+0

http://stackoverflow.com/questions/4255305/how-to-determine-encoding-table-of-a-text-file – stark

Antwort

1

Um zu erweitern, was die Kommentatoren sagten, müssen Sie die Codierung Ihrer Datei herausfinden. Der einfachste Weg, den ich kenne, ist:

  1. Öffnen Sie die Datei in Firefox.
  2. Klicken Sie mit der rechten Maustaste auf die Seite und wählen Sie "Seiteninfo anzeigen"
  3. Sehen Sie, was die "Text Encoding" ist.
  4. Dann können Sie die codecs documentation für den Codec anstelle von utf_8 in Ihrer f = codecs.open(...) Zeile überprüfen.

Screenshot der Schritte 1 – 3:

screenshot

0

Es sieht aus wie Sie auf einem Windows-Rechner, wo Codierung für die Textdatei sind möglicherweise von UTF-8 unterschiedlich sein, möchten Sie vielleicht versuchen, Verwenden Sie cp1252/ISO-8859-1 zum Decodieren der Bytefolge und codieren Sie sie dann erneut mit utf-8.

Sie können auch einen Blick hier um Beratung nehmen auf einer Best-Practice, wie Dateien lesen - Difference between open and codecs.open in Python