直接从 urlrquest 读取压缩的 json

Dna*_*iel 2 python api json

我想直接将文件读取到 python 中而不需要保存它 - zip 文件相对较小并且绝对适合内存。

我目前正在尝试这个:

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

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

什么额外步骤可以解决这个问题?

我正在使用Python 3.6。

谢谢!

Han*_*nnu 5

现在,您可以将压缩存档(可以包含许多文件)视为包含实际数据的文件。让我们假设您的 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)
Run Code Online (Sandbox Code Playgroud)

或类似的东西。我实际上无法测试实时数据,但可以尝试一下。它基本上会解压缩在存档中找到的第一个文件,然后将其视为 json。