2016-07-01 22 views
0

Ich lese gerade: Python 3.5.1 :: Anaconda 4.0.0 (x86_64).UnicodeDecodeError: 'Ascii' Codec kann Byte 0xc3 in Position 7601 nicht dekodieren: Ordnungszahl nicht im Bereich (128)

ERROR: UnicodeDecodeError: 'ascii' Codec Byte 0xC3 in Position nicht dekodieren kann 7601: ordinal nicht in Reichweite (128)

Wenn der Code unten läuft ich den obigen Fehler erhalten. Wenn ich speichern und versuche, die TXT-Datei von einer lokalen directy zu öffnen, erfahre ich den gleichen Fehler, aber wenn ich ein Duplikat speichern und ausführen, verkürze ich auf ~ 25 Zeilen den Lauf wie erwartet - jede Anleitung würde sehr geschätzt werden .

import numpy as np 
import matplotlib.pyplot as pp 
import seaborn 
import urllib.request 


urllib.request.urlretrieve('ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt','stations.txt') 

print(open('stations.txt','r').readlines()[:10]) 
+2

Haben Sie überprüft, welche Codierung für die Datei verwendet wurde? Ich bin sicher, die NOAA gibt das irgendwo an. Verwenden Sie diese Codierung dann beim Öffnen der Datei. –

+0

Wenn Sie nur die ersten 10 Zeilen benötigen, lesen Sie nicht zuerst die gesamte Datei. es ist eine große Datei. 'from itertools import islice', dann' lines = list (islice (openfileobj, 10)) 'würde Ihnen die ersten 10 Zeilen eines geöffneten Dateiobjekts geben, ohne den Rest zu lesen. –

+0

Wurde nur die ersten 10 Zeilen gedruckt, um zu sehen, ob es richtig funktionierte, da es sich um eine große Datei handelt. –

Antwort

2

Leider ist die documentation for that directory nicht angibt, welche Codecs für die Dateien verwendet wird, so öffnete ich die Datei in Binär-Modus statt und fand den Bytes, die ‚Straftat‘ verursacht.

Die Daten sind als UTF-8 kodiert; die ‚anstößigen‘ Bytes Sie Espanola buchstabieren begegnen:

>>> line 
b'US1NMRA0022 36.0456 -106.1517 1955.0 NM ESPA\xc3\xb1OLA 5.4 WNW       \n' 
>>> line.decode('utf8') 
'US1NMRA0022 36.0456 -106.1517 1955.0 NM ESPAñOLA 5.4 WNW       \n' 

Das ist die 63815. Zeile in der Datei, wenn Sie neugierig sind, weshalb man dieses Problem nicht sehen, wenn Sie die Datei gestutzt.

öffnen Sie die Datei mit diesem Codec:

open('stations.txt', 'r', encoding='utf8') 

Sie nicht auf dem Standard verlassen, die auf Ihrem Standort abhängt (was leicht von Umwelt-Umgebung unterscheidet).

+0

Das hat perfekt funktioniert, benötigt um die Kodierungsschicht hinzuzufügen! –