@maus_9999

Как заставит тг бота сохранять сброшенный ему файл в json формате?

Пишу тг бота, и необходимо, чтобы он сохранял файл полученный из переписки файл в формате json.
from telegram.ext import Application, MessageHandler, filters, CommandHandler


async def downloader_py(update, context):
    file = await context.bot.get_file(update.message.document)
    await file.download_to_drive('settings12412414')

async def downloader_json(update, context):
    file = await context.bot.get_file(update.message.document)
    await file.download_to_drive('items')

def main() -> None:
    application = Application.builder().token('токен').build()


    application.add_handler(MessageHandler(filters.Document.JSON, downloader_json))
    application.add_handler(MessageHandler(filters.Document.PY, downloader_py))
    application.add_handler(CommandHandler('start', start))
    application.add_handler(CommandHandler('stop', stop))

    application.run_polling()


if __name__ == '__main__':
    main()

Все остальные форматы сохраняются нормально, кроме json.
  • Вопрос задан
  • 323 просмотра
Решения вопроса 1
OhMySenpai
@OhMySenpai
Начинающий программист
Проблема заключается в том, что вы пытаетесь сохранить файл в формате JSON, используя метод download_to_drive(), который сохраняет файл в бинарном формате. Вместо этого вам нужно прочитать содержимое файла в виде текста и сохранить его в формате JSON.

Вот как можно изменить функцию downloader_json(), чтобы сохранить содержимое файла в формате JSON:
import json

async def downloader_json(update, context):
    file = await context.bot.get_file(update.message.document)
    downloaded_file = await file.download()

    with open('items.json', 'w') as f:
        content = await downloaded_file.read()
        json.dump(content.decode('utf-8'), f)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы