我有一个文件“stocks.json”,它存储了从API中检索到的股票价格信息。我编写了一个Python函数,该函数接收“stocks.json”文件中的每个符号,将每个符号添加到API URL中,并使用该URL调用API。然后,该函数接收API中的任何数据,并将其转储到JSON文件中。
现在的问题是,当我在stocks.json文件中添加一个在API中无效的符号时,API不会返回该符号的任何结果,函数会用API中的任何内容覆盖JSON文件,从而将无效的符号从文件中删除。如何才能使无效的符号保留在JSON文件中?
功能:
def updateStocks(api_key):
try:
f = open('csv/stocks.json', 'r')
all_stocks_settings = json.load(f)
f.close()
stock_info = all_stocks_settings['symbols']
symbols = list(stock_info.keys())
url = 'API URL'
for symbol in symbols:
url += symbol + ','
url += '&apiKey=' + api_key
response = requests.get(url)
data = response.json()
stock_info = {}
if len(data) > 0:
for symbol in symbols:
for stock in data:
if stock['symbol'] == symbol:
stock_info[stock['symbol']] = {'current': stock['price'], 'change': stock['change_since'], 'percent_change':stock['percent']}
all_stocks_settings['symbols'] = stock_info
f = open('csv/stocks.json', 'w+')
json.dump(all_stocks_settings, f)
f.close()
except Exception as e:
pass
stock_info(stocks.json文件中的符号)
{"CHKP": {"current": "127.27", "change": "1.68", "percent_change": "1.34"}, "MSFT": {"current": "227.86", "change": "6.37", "percent_change": "2.88"}, "WMT": {"current": "142.52", "change": "1.53", "percent_change": "1.09"}, "HTZ": {"current": "17.90", "change": "0.36", "percent_change": "2.05"}, "NFLX": {"current": "257.01", "change": "-3.84", "percent_change": "-1.47"}, "GOOG": {"current": "88.69", "change": "2.00", "percent_change": "2.31"}, "AAPL": {"current": "138.25", "change": "-0.15", "percent_change": "-0.11"}, "ASDF":{}}
在stock_info列表的末尾,您会看到符号“ASDF”,这在API上不是有效的符号(仅作为示例使用)。
数据(根据stock_info从API检索)
[{"symbol":"CHKP","price":"127.27","close_price":"125.59","change_since":"1.68","percent":"1.34","updated":"11/07/22 15:01:02"},{"symbol":"MSFT","price":"227.86","close_price":"221.49","change_since":"6.37","percent":"2.88","updated":"11/07/22 15:01:03"},{"symbol":"WMT","price":"142.52","close_price":"140.99","change_since":"1.53","percent":"1.09","updated":"11/07/22 15:01:03"},{"symbol":"HTZ","price":"17.90","close_price":"17.54","change_since":"0.36","percent":"2.05","updated":"11/07/22 15:01:03"},{"symbol":"NFLX","price":"257.01","close_price":"260.85","change_since":"-3.84","percent":"-1.47","updated":"11/07/22 15:01:03"},{"symbol":"GOOG","price":"88.69","close_price":"86.69","change_since":"2.00","percent":"2.31","updated":"11/07/22 15:01:03"},{"symbol":"AAPL","price":"138.25","close_price":"138.40","change_since":"-0.15","percent":"-0.11","updated":"11/07/22 15:01:03"}]
正如您所看到的,stock_info中的符号“ASDF”没有显示在API端。
当我运行这个函数时,它会覆盖并删除stocks.json上的符号“ASDF”,因为它只是从API中获取数据并将其转储到JSON文件中。如何使符号“ASDF”保留在JSON文件中?即使“ASDF”没有显示在API中?
2条答案
按热度按时间6ljaweal1#
数据(根据stock_info从API检索):
如果我对这个问题理解正确的话--没有密钥--对于身份来说,它是哪支股票?
在这个对象数组中-被转换为字典(其中key =符号):
输出:
os8fio9y2#
已通过删除
stock_info = {}
修复此问题