Сериализация переменных в Python
Пишу бота для Discord, задача бота ставить лимит цены на стоки и при достижении сигнализировать. Есть две переменных: stock и price. Каждое отправленное сообщение в Discord присваивается к этим переменных. К примеру AAPL 127, где aapl это stock, а 127-price. Бот умеет следить за несколькими стоками сразу, но при перезагрузки скрипта или при пропадании интернет соединения все присвоенные значение сбрасываются. Вопрос есть ли способ все эти переменные сохранить в файле и при загрузке скрипта он их считывал с файла, и была возможность добавлять и удалять значение в этом файле. Знаю что для таких случаев есть pickle, но не как не смог это реализовать, может есть другие способы?
import pickle
import discord
from discord.ext import commands
from config import settings
import aiohttp
from bs4 import BeautifulSoup
bot=commands.Bot(command_prefix = settings['prefix'], help_command=None)
@bot.event
async def on_ready():
bot.session = aiohttp.ClientSession()
print('Logged in as')
print(bot.user.name)
print(bot.user.id)
print('Bot is ready')
print('--------------------')
@bot.event
async def on_message(message):
await bot.process_commands(message)
channel = message.channel
co = '{0.content}'.format(message).split()
stock=co[0]
price=float(co[1])
print(stock)
print(price)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0'
}
while True:
async with bot.session.get(
f'https://finance.yahoo.com/quote/{stock}?p={stock}.tsrc=fin-srch',
headers=headers
) as r:
def scrape(html):
soup = BeautifulSoup(html, 'lxml')
content = soup.find('div', {"class": 'My(6px) Pos(r) smartphone_Mt(6px)'}).find('span').text
return content
content = await bot.loop.run_in_executor(None, scrape, await r.text())
con=float(content)
if price <= con:
await channel.send("достиг")
break
print(f'{stock} {content}')
bot.run(settings['token'])
Ответы (1 шт):
Правильный способ: подключить базу данных и туда сохранять. Судя по коду это личный проект и он будет на одном сервере работать и sqlite3 должно хватить вполне (для продакта такой код не годится можно словить лимит на API, но не в этом суть вопроса)
Простой способ уровня "и так сойдет": создать json файл и туда сохранять, структура файла будет выглядеть примерно так:
{
"stock": 0,
"price": 0
}