У меня есть файл Excel, где sheet1 выглядит так: 
Названия компаний выделены жирным шрифтом [APPLE, EPSON, ROLAND]
названия проектов находятся под названиями компаний.
вот CSV с картинки:
Report Date,10/10/18,,,
Page 1 of 1,,,,
,,,,
Project Name,,Job Number,Start Date,Due Date
,,,,
APPLE,,,,
macbook,,12345,1/1/19,2/1/19
iphone,,23456,1/2/19,2/2/19
,,,,
EPSON,,,,
ET-2000 printer,,34567,1/3/19,2/4/19
,,,,
ROLAND,,,,
RD-700,,45678,1/4/19,2/4/19
Рабочий лист находится в памяти с использованием openpyxl. Мой желаемый результат - иметь словарь Python с компанией в качестве ключа. Ниже я попробовал, но на выходе есть все проекты в каждой компании, а не только проекты для каждой компании.
from openpyxl import load_workbook
from collections import namedtuple
Record = namedtuple('Record', 'project_name job_number start_date due_date ')
from pprint import pprint
wb = load_workbook('SOquestion.xlsx')
ws = wb.active
def make_co_list(ws):
co_list = []
for _ in ws.rows:
if _[0].value and _[2].value == None:
co_list.append(_[0].value)
co_list.remove('Report Date')
co_list.remove('Page 1 of 1')
return co_list
co_list = make_co_list(ws)
co_dict = {c:[] for c in co_list}
for k,v in co_dict.items():
for row in ws.rows:
if row[0].value == k:
co = k
for row in ws.rows:
if co and row[2].value and row[0].value not in ["Report Date", "Page 1 of 1", "Project Name", co_list] :
record = Record(row[0].value,
row[2].value,
row[3].value,
row[4].value
)
print("record", record)
co_dict[co].append(record)