Top.Mail.Ru
Ответы

Как мне сделать поиск по ключу в exel файле и отправлять инфу исходя от ключа на aiogram

пишу бота в тг, не выходит сделать поиск ключа(который отправит пользователь), в столбце А и выводить информацию по строке где найден этот ключ и столбцу В и С
вот код

1234
 @router.callback_query(F.data == 'ContactEquipment_MagMK') 
async def ask_code(callback: CallbackQuery): 
  await callback.answer() 
  await callback.message.edit_text('Укажите код') 
123456789101112131415
 # Загрузка файла xlsx в DataFrame  
codes_df = pd.read_excel('data.xlsx', sheet_name='Лист1', index_col=0, header=0, names=['A', 'B', 'C'])   
  
@router.message()     
async def handle_message(message):   
    code = message.text   
    await message.reply('Проверяем код...')   
    print (code) 
    print (codes_df.index) 
    if code in codes_df.index:   
        row = codes_df.loc[code]   
        print (row) 
        await message.reply(f"Данные: {row['B']}, {row['C']}")   
    else:   
        await message.reply('Неверный код') 

на любое смс выдает смс неверный код

По дате
По рейтингу
Аватар пользователя
Профи

Ответ сгенерированный при помощи ChatGPT:
Проблема, вероятно, возникает из-за того, что codes_df.index содержит индексы DataFrame, а не значения столбца A, которые вы пытаетесь найти в сообщении пользователя. Вам нужно изменить эту часть кода, чтобы искать значение кода в столбце A. Вот как это можно сделать:

12345678910111213141516171819
 @router.callback_query(F.data == 'ContactEquipment_MagMK') 
async def ask_code(callback: CallbackQuery): 
    await callback.answer() 
    await callback.message.edit_text('Укажите код') 
    # Загрузка файла xlsx в DataFrame 
    global codes_df 
    codes_df = pd.read_excel('data.xlsx', sheet_name='Лист1') 
 
@router.message() 
async def handle_message(message): 
    global codes_df 
    code = message.text 
    await message.reply('Проверяем код...') 
    if code in codes_df['A'].values: 
        row = codes_df[codes_df['A'] == code] 
        await message.reply(f"Данные: {row['B'].values[0]}, {row['C'].values[0]}") 
    else: 
        await message.reply('Неверный код') 
 

Этот код будет искать значение code в столбце A DataFrame, а затем выводить данные из столбцов B и C для соответствующей строки.