Форум сайта python.su
Добрый день!
Есть эксель файл с данными о продажах, состоящий из 4 полей: клиент, продукт, количество купленного товара, количество проданного товара.
Задача: пройтись по файлу и поместить все данные в список списков. При этом значения должны быть сгруппированы по Клиенту и Продукту, так как в файле есть повторяющиеся Клиент&Продукт.
Код ниже выдает пустой список, я понимаю почему (после continue переходит к основному циклу), но не понимаю куда мне двигаться дальше и как правильно построить вложенные циклы, чтобы осуществить проверку наличия элемента в списке перед добавлением.
Подскажите, пожалуйста.
import openpyxl wb = openpyxl.load_workbook(filepath) sheet = wb.active client = sheet['A'] product = sheet['B'] sellin = sheet['C'] sellout = sheet['D'] sales_list = [] for i in range(len(client)): for j in range(len(sales_list)): one_string = [] if client[j][0] != client[i].value and product != product[i].value: continue elif client[j][0] == client[i].value and product == product[i].value: sales_list[j][2] = sales_list[j][2] + sellin[i].value sales_list[j][3] = sales_list[j][3] + sellout[i].value break else: one_string.append(client[i].value) one_string.append(product[i].value) one_string.append(sellin[i].value) one_string.append(sellout[i].value) sales_list.append(one_string)
Офлайн
Andrew2525Код выдает по другой причине.
Код ниже выдает пустой список, я понимаю почему (после continue переходит к основному циклу)
for i in range(0): print(1) print('OK')
Отредактировано Romissevd (Июль 8, 2020 21:45:31)
Офлайн
Подскажи, пожалуйста, с кодом, чтобы выполнить эту задачу.
Офлайн
Andrew2525скинь эксель файл с которым работаешь,или отрывок чтобы попробовать
Подскажи, пожалуйста, с кодом, чтобы выполнить эту задачу.
Офлайн
xam1816Отрывок из файла так выглядит:
скинь эксель файл с которым работаешь,или отрывок чтобы попробовать
Офлайн
Andrew2525Сначала нужно ввести данные из Excel-файла в питон напрямую, без преобразований. Потом уже из этих введённых данных можно получить нужную структуру.
Подскажите, пожалуйста.
Отредактировано py.user.next (Июль 9, 2020 00:38:45)
Офлайн
так?
import openpyxl wb = openpyxl.load_workbook(filepath) sheet = wb.active client = sheet['A'] product = sheet['B'] sellin = sheet['C'] sellout = sheet['D'] sales_list = [] for cl,pr,s_in,s_out in zip(client,product,sellin,sellout): sales_list.append((cl.value,pr.value,s_in.value,s_out.value)) sales_list.sort() for i in sales_list: print(i)
Офлайн
Нет не так
import xlrd def load_page(nm:str, ipage:int=0)->list: wb = xlrd.open_workbook(nm) sheet = wb.sheet_by_index(ipage) return [sheet.row_values(i) for i in range(sheet.nrows)] data = load_page("a.xlsx") data.sort()
Отредактировано doza_and (Июль 9, 2020 09:49:52)
Офлайн
doza_andЯ это сделал, поскольку у меня также есть другой эксель файл, в котором есть много других ненужных полей, мне же нужны данные только из четырех.
Захадкодили количество столбцов
doza_andВ документации библиотеки указано, что ее можно использовать для чтения файлов. Подскажите, почему инструмент выбран неудачно?
Ну и наконец openpyxl предназначен в первую очередь для создания экселовских файлов.
Офлайн
Конечно делать можно как угодно, универсальных рекомендаций не бывает.
В начале пишете:
Andrew2525В конце вдруг оказывается:
Есть эксель файл с данными о продажах, состоящий из 4 полей
Andrew2525Такие вещи надо сразу в техническом задании указывать.
Я это сделал, поскольку у меня также есть другой эксель файл
Andrew2525Я давненько не работал с экселом. В свое время при работе с заказчиками жестко договорились что мы вообще не принимаем данные в формате exel (Люди всегда там чего-то нарукоблудят. Изменят формат ячейки, напихают формул, пустых строк, импортнут данные, а эксел плавающие числа в даты переделает, продолжать этот список потенциальных косяков можно до бесконечности). Если данные простенькие то csv или архив с csv файлами. Если сложные то hdf5 или sqlite. Такое организационное решение сразу ликвидировало кучу проблем.
В документации библиотеки указано, что ее можно использовать для чтения файлов. Подскажите, почему инструмент выбран неудачно?
Отредактировано doza_and (Июль 10, 2020 10:23:30)
Офлайн