@Juliano_Lopez

Как сделать что бы на экран вывелись повторные значения, которые дальше в столбце?

Есть код, где я получаю информацию из гугл таблицы. Как тут, имя я беру с переменной Name в ячейке А:A,
Далее на основании ника берется последующая информация.
Имя Frank Vegas в А:A используется несколько раз в этом столбце, соответственно в каждой строке Frank Vegas разная информация о нем, при таком коде, выводит только первое совпадения, остальные не выводит, а нужно что бы выводило все значения, которые встречаются. Код может и карявый, я новичок, не ругайтесь))
import config
from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient.discovery import build
import httplib2
path_json = config.TOKEN_JSON
creds_auth = ServiceAccountCredentials \
    .from_json_keyfile_name(path_json, [config.URL_GOOGLEAPIS]) \
    .authorize(httplib2.Http())

service = build('sheets', 'v4', http=creds_auth)

sss = service.spreadsheets()
shead_id = config.SHEED_ID

username = sss.values().get(spreadsheetId=shead_id, range="Логи!A:A").execute()
name = 'Frank Vegas'
list_name = username.get('values')
index_name = list_name.index([f'{name}'])
result_name = username.get('values')[index_name][0]
user_zvan = sss.values().get(spreadsheetId=shead_id, range="Логи!D:D").execute()
result_zvan = user_zvan.get('values')[index_name][0]
user_data_add = sss.values().get(spreadsheetId=shead_id, range="Логи!B:B").execute()
result_user_data_add = user_data_add.get('values')[index_name][0]
user_name_add = sss.values().get(spreadsheetId=shead_id, range="Логи!E:E").execute()
result_user_name_add = user_name_add.get('values')[index_name][0]
logs_status = sss.values().get(spreadsheetId=shead_id, range="Логи!F:F").execute()
result_logs_status = logs_status.get('values')[index_name][0]
user_nickname = "Имя: " + result_name
user_zvanie = "Звание на тот момент: " + result_zvan
user_data = "Дата занесения в логи: " + result_user_data_add
user_add = "Кем добавлен: " + result_user_name_add
status = "Статус: " + result_logs_status
print(user_nickname + '\n' + user_zvanie + '\n' + user_data + '\n' + user_add + '\n' + status)
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Вместо метода index() перебирай элементы списка list_name и их индексы. Если очередной элемент содержит нужное имя - вытаскиваешь по этому индексу информацию из других столбцов, выводишь. И так пока элементы в списке не кончатся. В общем, гугли про цикл for и функцию enumerate().

Более практичным подходом было бы получать сразу весь диапазон Логи!A:F, и перебирать его строки. Тогда и индекс считать не потребуется, у тебя в текущей строке будет информация по одному и тому же юзеру. Проверяешь нулевой элемент строки на нужное имя, если совпало - вытаскиваешь из последующих элементов нужную информацию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы