2016-12-14 3 views
-1

Я новичок в Python и взял эту книгу «Python для анализа данных» pydata книгаПроблемы с Python JSon декодирования

Во всяком случае я попробовал самый первый код в книге на странице 18, и я получаю ошибка. Попробовал снова загрузить весь файл, но по-прежнему имеет ту же ошибку.

Это сообщение об ошибке

UnicodeDecodeError Traceback (most recent call last) 
in() 
----> 1 records=[json.loads(line) for line in open(path)] 

in (.0) 
----> 1 records=[json.loads(line) for line in open(path)] 

/Users/gambit_remy08/anaconda/lib/python3.5/encodings/ascii.py in decode(self, input, final) 
24 class IncrementalDecoder(codecs.IncrementalDecoder): 
25 def decode(self, input, final=False): 
---> 26 return codecs.ascii_decode(input, self.errors)[0] 
27 
28 class StreamWriter(Codec,codecs.StreamWriter): 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 6987: ordinal not in range(128) 

Вот ссылка на Github на вышеуказанной нити https://github.com/wesm/pydata-book/issues/48#issuecomment-266333303

+2

Какую версию Python вы используете? Похож на проблему Unicode. Также, пожалуйста, разместите свои данные json. – Nevertheless

+0

Последняя строка в этом файле - пустая строка. Удалите последнюю строку и ваш код будет работать идеально. – MYGz

+0

'records = [json.loads (строка) для строки в открытом (путь, кодирование = 'utf8')]' –

ответ

0

UnicodeDecodeError обычно происходит при декодировании строку от ул определенного кодирования. Поскольку кодировки отображают только ограниченное число строк для символов Unicode, незаконная последовательность символов str приведет к сбою в декодировании, специфичном для кодирования().

См here

Чтобы решить эту проблему вы можете использовать your_string.decode('utf8', 'ignore')

records=[json.loads(line.decode('utf8', 'ignore')) for line in open(path)] 
0

Я найти решение для него. В принципе просто нужно использовать это и работает до сих пор

records = [json.loads(line) for line in open(path, encoding='utf8')] 
Смежные вопросы