每小时从 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。