Dan*_*Lew 21 python compatibility json urllib python-3.x
我真的厌倦了试图找出为什么这个代码在Python 2中而不是在Python 3中工作.我只是想抓取一个json页面然后解析它.这是Python 2中的代码:
import urllib, json
response = urllib.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)
Run Code Online (Sandbox Code Playgroud)
我认为 Python 3中的等效代码是这样的:
import urllib.request, json
response = urllib.request.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)
Run Code Online (Sandbox Code Playgroud)
但它在我脸上爆炸,因为read()返回的数据是"字节"类型.但是,我不能为我的生活让它转换成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"))
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
编辑:问题是我无法将数据变为可用状态; 即使json加载数据,其中一部分是无法显示的,我希望能够将数据打印到屏幕上.
第二次编辑:问题与打印有关,而不是解析.通过将IO设置为utf8,Alex的答案为脚本在Python 3中的工作方式提供了一种方法.但问题仍然存在:为什么代码在Python 2中工作,而不是Python 3?
Ale*_*lli 15
您发布的代码可能是由于错误的剪切和粘贴操作,因为它在两个版本中都显然是错误的(f.read()因为没有f定义裸名称而失败).
在Py3中,ur = response.decode('utf8')对我来说效果非常好,如下所示json.loads(ur).也许错copys和焊膏影响您的2到3转换尝试.
取决于您的python版本,您必须选择正确的库.
对于python 3.5
import urllib.request
data = urllib.request.urlopen(url).read().decode('utf8')
Run Code Online (Sandbox Code Playgroud)
对于python 2.7
import urllib
url = serviceurl + urllib.urlencode({'sensor':'false', 'address': address})
uh = urllib.urlopen(url)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13901 次 |
| 最近记录: |