@winniuss

Как получить строку из Excel Python?

Есть таблица такого вида:
5d90b4b48e176397824006.png
С помощью кода
import openpyxl

wb = openpyxl.load_workbook('logs/19АП1-1.xlsx')

subs = [ ]
sheets = wb.sheetnames
for sheet in sheets:
    subs.append(sheet)

sheet = wb.active

k = 0
for cell in sheet['A']:
    k = k + 1

rows = [ ]
for i in range(1, k+1):
    for row in sheet[i]:
            rows.append(str(row.value).replace('.0', ''))
print(rows)

я получаю на вывод
['ФИО', '1', '5', '11', '29', 'Иванов Иван', '3', '4', '4', '3', 'Петров Петр', '5', '5', '3', '5']

Как отсюда по имени фамилии достать оценки для Иванова Ивана? То есть '3', '4', '4', '3' с учетом, что оценок может быть неограниченное количество?
  • Вопрос задан
  • 2133 просмотра
Решения вопроса 1
NeiroNx
@NeiroNx
Программист
Как то вы неправильно структурируете данные. Мне лень набирать экселевский файл поэтому так:
1 строка это заголовок - оттуда нужно извлечь массив чисел.
все стороки со второй - первая колонка "ключ", со второй колонки данные.
причем данные нужно тоже по ключам рассортировать чтобы получить в итоге структуру:
rows={"Иванов Иван":{1:3,5:4,11:4,29:3},"Петров Петр":{1:5,5:5,11:3,29:5}}

Чтобы потом и извлечь оценка за 29 число: rows["Иванов Иван"][29]
from openpyxl import Workbook
##Для примера создадим книгу в памяти вместо загрузки файла
wb = Workbook()
ws1 = wb.active
ws1.append(['ФИО', '1', '5', '11', '29'])
ws1.append(['Иванов Иван', '3', '4', '4', '3'])
ws1.append(['Петров Петр', '5', '5', '3', '5'])
#Основной код
rows={}
dates = [int(x.value) for x in ws1.iter_rows(min_col=2,max_row=1).send(None)]#тут  [1, 5, 11, 29]
for row,name in enumerate([x.value for x in ws1.iter_cols(max_col=1,min_row=2).send(None)],2):#тут ['Иванов Иван', 'Петров Петр']
	rows[name]={}
	for col,date in enumerate(dates,2):
		rows[name][date] = ws1.cell(row,col).value
print(rows['Иванов Иван'][29])

## или все оценки
print(list(rows['Иванов Иван'].values()))

enumerate(array,start) перечисляет массив и позволяет избежать всяких k=k+1
iter_rows и iter_cols - получают строки и колонки, возвращают генератор из которого берем первое значение функцией send(None)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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