【问题标题】:How to get last date in updated json file?如何在更新的 json 文件中获取最后日期?
【发布时间】:2021-07-27 03:01:52
【问题描述】:

我正在从 json 文件中获取我的数据,并且数据每天都会更新。 我怎样才能只获得该 json 文件中的最新日期?每个国家/地区的核心

这是我获取 json 数据的代码:

# Print Daily Updated Report from JSON file from this (URL)

import json
import urllib.request, json 

url = "https://opendata.ecdc.europa.eu/covid19/nationalcasedeath_eueea_daily_ei/json/"
data = urllib.request.urlopen(url).read().decode()

obj = json.loads(data)
for p in obj['records']:
        a= ('Country: ' + p['countriesAndTerritories'])
        b= ('Date: ' + p['dateRep'])
        c=('Cases: ' + str(p['cases']))
        d=('Deaths: ' + str(p['deaths']))
        AllData = (a,b,c,d)
        print(AllData)

【问题讨论】:

    标签: python json web-scraping urllib


    【解决方案1】:

    您只需要一个latest_day变量库

    完整代码为:

    import json
    import urllib.request, json 
    
    url = "https://opendata.ecdc.europa.eu/covid19/nationalcasedeath_eueea_daily_ei/json/"
    data = urllib.request.urlopen(url).read().decode()
    
    obj = json.loads(data)
    latest_day = obj['records'][0]['dateRep']
    
    for p in obj['records']:
        if p['dateRep'] == latest_day:
            a= ('Country: ' + p['countriesAndTerritories'])
            b= ('Date: ' + p['dateRep'])
            c=('Cases: ' + str(p['cases']))
            d=('Deaths: ' + str(p['deaths']))
            AllData = (a,b,c,d)
            print(AllData)
    

    【讨论】:

      【解决方案2】:

      您可以使用itertools.groupby 对元素进行分组,然后使用max() 和自定义key= 在组内搜索最新日期。例如:

      import json
      import urllib.request, json
      from itertools import groupby
      from datetime import datetime
      
      url = "https://opendata.ecdc.europa.eu/covid19/nationalcasedeath_eueea_daily_ei/json/"
      data = urllib.request.urlopen(url).read().decode()
      
      obj = json.loads(data)
      
      for country, group in groupby(
          sorted(obj["records"], key=lambda k: k["countriesAndTerritories"]),
          lambda k: k["countriesAndTerritories"],
      ):
          mx = max(group, key=lambda k: datetime.strptime(k["dateRep"], "%d/%m/%Y"))
          print(country)
          print(json.dumps(mx, indent=4))
          print("-" * 80)
      

      打印:

      Austria
      {
          "dateRep": "04/05/2021",
          "day": "04",
          "month": "05",
          "year": "2021",
          "cases": 888,
          "deaths": 25,
          "countriesAndTerritories": "Austria",
          "geoId": "AT",
          "countryterritoryCode": "AUT",
          "popData2020": "8901064",
          "continentExp": "Europe"
      }
      --------------------------------------------------------------------------------
      Belgium
      {
          "dateRep": "04/05/2021",
          "day": "04",
          "month": "05",
          "year": "2021",
          "cases": 0,
          "deaths": 0,
          "countriesAndTerritories": "Belgium",
          "geoId": "BE",
          "countryterritoryCode": "BEL",
          "popData2020": "11522440",
          "continentExp": "Europe"
      }
      --------------------------------------------------------------------------------
      Bulgaria
      {
          "dateRep": "04/05/2021",
          "day": "04",
          "month": "05",
          "year": "2021",
          "cases": 631,
          "deaths": 56,
          "countriesAndTerritories": "Bulgaria",
          "geoId": "BG",
          "countryterritoryCode": "BGR",
          "popData2020": "6951482",
          "continentExp": "Europe"
      }
      --------------------------------------------------------------------------------
      
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-07
        • 1970-01-01
        • 2020-05-12
        • 2019-02-26
        • 2012-07-07
        • 2011-05-20
        相关资源
        最近更新 更多