从urlrquest直接读取json

时间:2017-11-16 15:19:49

标签: python json api

我想直接读取文件到python w / o必须保存它 - zip文件相对较小,绝对适合mem。

我目前正在尝试这个:

        import urllib
        import json
        access_url = urllib.request.urlopen('http://api.eia.gov/bulk/COAL.zip')
        data = json.loads(access_url.read().decode())

但我收到错误: UnicodeDecodeError:' utf-8'编解码器不能解码位置15中的字节0xa0:无效的起始字节

可以采取哪些额外措施来解决这个问题?

我正在使用python 3.6。

谢谢!

2 个答案:

答案 0 :(得分:2)

您现在将压缩存档(可包含许多文件)视为包含实际数据的文件。我们假设您的zip只包含一个文件,然后包含实际的JSON数据。这可行:

import zipfile
import io
import urllib
import json

access_url = urllib.request.urlopen('http://api.eia.gov/bulk/COAL.zip')

z = zipfile.ZipFile(io.BytesIO(access_url.read()))
data = json.loads(z.read(z.infolist()[0]).decode())
print(data)

或类似的东西。我实际上无法对实时数据进行测试,而是试一试。它基本上解压缩它在您的存档中找到的第一个文件,然后将其视为json。

答案 1 :(得分:2)

import urllib.request
import json
from io import BytesIO
from zipfile import ZipFile


access_url = urllib.request.urlopen('http://api.eia.gov/bulk/COAL.zip')
zf = ZipFile(BytesIO(access_url.read()))
zdata = zf.read('COAL.txt')

print(zdata)