python - 高效循环大型 JSON 文件

标签 python json

我编写了一个简短的 Python 脚本,用于从 API 中提取一些人口数据并将其存储到 csv 中。 API 返回内容的示例可以在 here 中找到。 。 “数据”包含 8000 多个观察结果,因此我正在寻找一种有效的方法来访问它。我编写的代码可以工作,但需要几个小时才能运行。 因此我的问题是,有没有办法更有效地循环这个 JSON,或者提取所需的数据而不循环遍历每个观察?

import requests 
api_base = "http://dw.euro.who.int/api/v3/data_sets/HFAMDB/HFAMDB_8"

with open("population.csv", "w") as outfile:
   outfile.write("country,year,group,fullname,count\n")
   for i in range(32,51):
      response = requests.get(api_base+str(i))
      print(api_base+str(i))
      for observation in response.json()['data']:
          count = observation["value"]["numeric"]
          country = observation["dimensions"]["COUNTRY"]
          year = observation["dimensions"]["YEAR"]
          group = observation["dimensions"]["AGE_GRP_6"]
          fullGroupName = response.json()['full_name']
          if observation["dimensions"]["SEX"] == "ALL":
              outfile.write("{},{},{},{},{}\n".format(country, year, group, fullGroupName, count))

预先感谢您的回答。

最佳答案

好吧,如果没有必要,请不要一遍又一遍地调用 response.json()

而不是

  for observation in response.json()['data']:
      fullGroupName = response.json()['full_name']

  data = response.json()
  for observation in data['data']:
      fullGroupName = data['full_name']

进行此更改后,整个过程需要我的电脑大约 33 秒。几乎所有这些都是为了满足请求。如果站点可以的话,也许您可​​以通过使用并行请求来进一步加快速度。

关于python - 高效循环大型 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46491566/

相关文章:

python - wxPython 嵌套面板和 Sizer

python - 在 Mac 和 Windows 上的 python 中处理\r\n vs\n 换行符

Python If Else 循环

javascript - 如何使用 JavaScript 搜索 JSON 树

json - Gson 是否有类似 @JsonProperty 的方法?

java - 字符串请求发布未显示任何错误

python - 在通用 Web 平台上从 HTML 执行 Python

python - 如何使用 numpy 使用索引向量设置 0-1 矩阵?

javascript - 动态定义 JSON - 找不到我做错了什么

c++ - 如何使用 Casablanca 在现有的 web::json::value 对象中附加新的键值对?