2016-07-01 69 views
0

我目前正在運行:Python 3.5.1 :: Anaconda 4.0.0(x86_64)。UnicodeDecodeError:'ascii'編解碼器無法解碼位置7601中的字節0xc3:序號不在範圍內(128)

ERROR:UnicodeDecodeError錯誤: 'ASCII' 編解碼器不能在7601位置解碼字節0xc3:在範圍內(128)

序數不運行時下面的代碼我得到上述錯誤。當我保存並嘗試從本地直接打開txt文件時,我遇到了同樣的錯誤,但是,當我保存並運行重複項時,我縮短到約25行,按預期運行 - 任何指導都將非常感激。

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

您是否檢查過該文件使用了哪種編碼?我確定NOAA在某處指定。然後在打開文件時使用該編碼。 –

+0

另外,如果您只需要前10行,請不要先閱讀整個文件;這是一個大文件。 '從itertools import islice',然後'lines = list(islice(openfileobj,10))'會給你一個打開的文件對象的前10行而不讀剩下的。 –

+0

只打印前10行,看它是否正常工作,因爲它是一個大文件。 –

回答

2

不幸的是,documentation for that directory沒有規定使用何種編解碼器中的文件,所以我打開二進制模式的文件,而不是發現,造成「進攻」的字節數。

數據編碼爲UTF-8;在「違規」字節你遇到拼寫出的Espanola:

>>> 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' 

這是文件中的第六萬三千八百十五行,如果你很好奇,這就是爲什麼你沒有看到這個問題,當您截斷該文件。

打開與該編解碼器文件:

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

不要依賴於默認的,這取決於您的區域設置(這很容易從環境不同環境)。

+0

工作完美,需要添加編碼層! –

相關問題