每小时从 JSON 文件更新 python 字典

Posted

技术标签:

【中文标题】每小时从 JSON 文件更新 python 字典【英文标题】:Update python dictionary from JSON file every hour 【发布时间】:2022-01-22 00:16:25 【问题描述】:

我一直在开发 Telegram 机器人,为不同加油站的汽油和柴油价格提供服务。我每小时下载一个带有更新价格的 JSON 文件,并将它们放入这样的字典中:

import json

with open('output1.json', encoding='utf-8') as f:
    data = json.loads(f.read())
f.close()

def rotul_2668():
    return (data['ListaEESSPrecio'][37]['Rótulo'])
def direccio_2668():
    return (data['ListaEESSPrecio'][37]['Dirección'])
def benzina_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gasolina 95 E5'])
def dieselA_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gasoleo A'])
def dieselB_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gasoleo B'])
def dieselPremium_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gasoleo Premium'])
def GLP_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gases licuados del petróleo'])

ciutadella_2668 = 
    'rotul' : rotul_2668(),
    'direccio' : direccio_2668(),
    'benzina' : benzina_2668(),
    'dieselA' : dieselA_2668(),
    'dieselB' : dieselB_2668(),
    'dieselPremium' : dieselPremium_2668(),
    'GLP': GLP_2668()

然后从外部函数调用字典条目。到目前为止,一切都运行良好,直到需要更新字典并提供新的价格,而这永远不会。知道为什么会这样吗?可能是因为存储在 var "data" 中的数据永远不会重新加载?如果是这样,可能的解决方案是什么?

感谢您的宝贵时间

【问题讨论】:

不需要f.close() 代码的哪一部分每 1 小时运行一次,如何运行? 哪个逻辑应该更新字典?运行脚本并完成执行后,它不会检查更新。 如果你从某个网址下载你的json文件,你可以使用requests库。您需要找到一种方法来安排更新。 真@balderman,我只是假设关闭它会强制加载更新的文件。 【参考方案1】:

它没有重新加载,因为您将代码放在文件级别。因此,当您第一次访问 ciutadella_2668 时,所有文件都会被导入,output1.json 会被读取并会被填充字典。快速修复(不是最佳想法)将其放入函数中

import json

def get_ciutadella_2668():
  with open('output1.json', encoding='utf-8') as f:
    data = json.loads(f.read())

  def rotul_2668():
    return (data['ListaEESSPrecio'][37]['Rótulo'])
  def direccio_2668():
    return (data['ListaEESSPrecio'][37]['Dirección'])
  def benzina_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gasolina 95 E5'])
  def dieselA_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gasoleo A'])
  def dieselB_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gasoleo B'])
  def dieselPremium_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gasoleo Premium'])
  def GLP_2668():
    return (data['ListaEESSPrecio'][37]['Precio Gases licuados del petróleo'])

  return 
    'rotul' : rotul_2668(),
    'direccio' : direccio_2668(),
    'benzina' : benzina_2668(),
    'dieselA' : dieselA_2668(),
    'dieselB' : dieselB_2668(),
    'dieselPremium' : dieselPremium_2668(),
    'GLP': GLP_2668()
  

另一种方法是使用一些每小时运行的python scheduler 并更新这个特定的变量,而不是在读取它时,而是在获取新文件时。

【讨论】:

感谢您抽出宝贵时间@kosciej16,它成功了!因此,它将像这样运行,直到我有时间尝试另一种方式,就像上面建议的关于将 JSON 数据导入数据库并从那里获取数据的方式。再次感谢您!

以上是关于每小时从 JSON 文件更新 python 字典的主要内容,如果未能解决你的问题,请参考以下文章

python 将SQLAlchemy Model序列化为字典(用于JSON输出)并从字典属性更新Model。

有没有办法从 python 脚本中获取不断变化的数据,并在 Vue 组件中显示和更新?

Heroku 每 24 小时更新一次其中的文件

Python从日期开始查找每小时的文件列表

python3 读excel转Json文件

在python中将json文件提取到字典中