【发布时间】:2015-08-14 18:06:58
【问题描述】:
我正在尝试从位于某个 URL 的文件中加载数据。我使用请求来获取它(这发生得很快)。但是,使用 r.json() 格式化部分字典大约需要 10 分钟。如何加快速度?
match_list = []
for i in range(1, 11):
r = requests.get('https://s3-us-west-1.amazonaws.com/riot-api/seed_data/matches%d.json' % i)
print('matches %d of 10 loaded' % i)
match_list.append(r.json()['matches'])
print('list %d of 10 created' % i)
match_histories = {}
match_histories['matches'] = match_list
我知道这里有一个相关问题:Performance problem transforming JSON data,但我不知道如何将其应用于我的案例。谢谢! (我使用的是 Python 3)。
编辑:
我收到了很多看起来很有希望的建议,但每一个我都遇到了障碍。
我想尝试 cjson,但我无法安装它(pip 找不到 MS Visual C++ 10.0,尝试使用 Lua 进行一些安装,但我的路径中需要 cl 才能开始;)。
json.loads(r.content) 在 Python 3 中导致 TypeError。
我不确定如何让 ijson 工作。
ujson 似乎需要和 json 一样长的时间
json.loads(r.text.encode('utf-8').decode('utf-8')) 也同样耗时
【问题讨论】:
-
你确定是json转换特别需要时间吗?当我尝试这个时,我发现即使
r.content也需要很长时间。从我看到的响应内容大约是 19MB。创建一个 19MB 的字符串将需要很长时间,即使您不尝试将其解析为 json。 -
呃,19MB 太小了。但我确实看到
json.load不认为它是有效的JSON,所以json.loads(r.content)引发UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 0: invalid continuation byte。我敢打赌r.json()在异常处理上花费了大量时间。 -
我必须将数据解码为 unicode 才能使用它:
data = json.loads(r.text.encode('utf-8').decode('utf-8')) -
我没有收到您遇到的 UnicodeDecode 错误。您是否做了一些特别的事情来查看该错误消息?知道如何减少异常处理所花费的时间吗?
-
他可能正在使用 Python 2。您必须特别注意 Python 2 中的 Unicode。
标签: python json python-3.x