Python 2 по сравнению с Python 3 - urllib форматы

Я становлюсь действительно усталым от попытки выяснить, почему этот код работает в Python 2 а не в Python 3. Я просто пытаюсь захватить страницу json и затем проанализировать его. Вот код в Python 2:

import urllib, json
response = urllib.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)

Я думал, что эквивалентный код в Python 3 будет этим:

import urllib.request, json
response = urllib.request.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)

Но это аварийно завершается в моей поверхности, потому что данные, возвращенные чтением (), являются типом "байтов". Однако я не могу ни за что в жизни заставить это преобразовывать во что-то, что json сможет проанализировать. Я знаю от заголовков, что reddit пытается передать utf-8 обратно мне, но я, может казаться, не заставляю байты декодировать в utf-8:

import urllib.request, json
response = urllib.request.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content.decode("utf8"))

Что я делаю неправильно?

Править: проблема состоит в том, что я не могу получить данные в применимое состояние; даже при том, что json загружает данные, часть его является невизуализуемой, и я хочу смочь распечатать данные на экран.

Второе редактирование: проблема больше имеет отношение к печати, чем парсинг, это кажется. Ответ Alex позволяет, чтобы сценарий работал в Python 3 путем установки IO на utf8. Но вопрос все еще остается: почему случается так, что код работал в Python 2, но не Python 3?

21
задан dreftymac 1 October 2016 в 20:57
поделиться

1 ответ

Код, который вы публикуете, вероятно, связан с неправильными операциями вырезания и вставки, потому что он явно неверен в обеих версиях ( f.read () не работает, потому что нет ] f начальное имя определено).

В Py3 у меня отлично работает ur = response.decode ('utf8') , как и следующий json.loads (ur) . Возможно, неправильные копии и вставки повлияли на ваши попытки преобразования 2 в 3.

15
ответ дан 29 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: