Я работаю над проектом, в котором считываю данные из листа Excel и загружаю их в API. Одна из проблем здесь заключается в том, что данные внутри листа не являются фиксированными. Это означает, что, скажем, вес атрибута находился в столбце 5, но позже он может переместиться в столбец 7. Допустим, ниже приведен лист Excel:
Код: Выделить всё
Name Age Gender Weight Category
xyz 20 M 76 A
abc 21 M 72 A
pqr 22 M 77 B
Допустим, возраст — это столбец 1. Но позже в некоторых других файлах он может быть в столбце 4. Поэтому мне нужно написать скрипт, который может принимать динамические столбцы и, соответственно, извлекать их данные и загружать их в API.
Ниже данные JSON, которые мне нужно загрузить:
Код: Выделить всё
{
"full_name":
"gender":
"age":
"total_weight":
"category":
}
Для этого я изначально думал, что при обработке листа Excel я сначала извлеку заголовки (имена столбцов), чтобы знать, в каком атрибуте столбца присутствует. Итак, для этого я сделал:
Код: Выделить всё
import xlrd
mop_workbook = xlrd.open_workbook(mo_file_path)
mop_sheet = mop_workbook.sheet_by_index(0)
attr_list = []
for i in range(mop_sheet.ncols):
attr_dict = dict()
attr_dict['attribute'] = mop_sheet.cell_value(0, i)
attr_dict['col_no'] = i
attr_list.append(attr_dict)
Теперь attr_list содержит:
Код: Выделить всё
[
{
"attribute": "Name",
"col_no": 0
},
"attribute": "Age",
"col_no": 1
},
"attribute": "Gender",
"col_no": 2
},
"attribute": "Weight",
"col_no": 3
},
"attribute": "Category",
"col_no": 4
},
]
Теперь, имея приведенные выше данные, я знаю, какой атрибут в каком столбце находится. Поэтому даже в будущем, если столбец атрибута изменится, я не буду беспокоиться, поскольку у меня есть новый col_no в приведенном выше списке dict. После этого мне просто пришлось использовать атрибут col_no, и здесь я запутался. Ниже приведен фрагмент кода того, как я обычно извлекаю значение ячейки:
Код: Выделить всё
for row in range(total_row):
if row != 0: # skipping the 0th row of headers
data = dict()
data['full_name'] = str(mop_sheet.cell_value(row, 0))
Теперь в приведенном выше коде вместо 0 в str(mop_sheet.cell_value(row, 0)) мне нужно применить номер столбца из список слов, которые я создал, но не понимаю, как его использовать. Что мне попробовать дальше?
Подробнее здесь:
https://stackoverflow.com/questions/692 ... -in-python