@@Akkaunt__Yerjan помню вначале нулевых изучал фак по фриинету, будучи студентом безденежным, да ещё и музыкантом, вот у меня к пела голова😂 Научился инет добывать, да ещё и не обворовывая людей при этом :)) Данные для авторизации тырил конечно, проникая в компы через гостевой доступ для авторизации. И оказалось, что у прова мультилогины были у всех😅 РОЛ вроде это был😂
Спасибо, очень интересно. Возможно ли сделать подобный видео-разбор с данными, которые бы писались в БД (желательно постгрес). Если бы еще на арендованном серваке было бы вдвойне полезно.
Не с 7 строки, а со строки содержащую "Артикул" + 1. С такой остановкой не важно будет как создан файл exl. Да и со столбцом тоже надо описывать поиск. Это не сложно и позволит избежать ошибки в файле с номерами строк и столбцов.
Да, можно было. Просто у меня это была одноразовая задача, в приоритете - быстрота написания кода. В последующем я ее включу в большой свой проект - там да, именно так и буду делать - парсить заголовок по названию столбца.
@@oldcoders Я программирую, но не на Phyton, однако, заметил, что стоит сразу писать очевидные вещи, что-бы потом не забыть или не попасться на мелочи. И моя пометка больше к начинающим программировать. За урок, конечно, спасибо.
Спасибо автору! Описан нормальный путь создания скрипта от постановки задачи до практической реализации в конкретной области. Использование простых конструкций позволяет понять происходящее для начального уровня, кому и предназначены эти видео. Замечания в комментариях по улучшению предложенного кода расширяют кругозор. Их авторам также спасибо!
Нет необходимость так сортировать словарь (преобразования сортированного списка кортежей обратно в словарь) достаточно написать for key, value in sorted(subcategories_dict.items()): т.к. по сути словари это неупорядоченные последовательности. То что в последних версиях python перебор элементов словаря идёт по порядку их занесения в словарь, не гарантирует аналогичное поведение в более ранних версиях python
Меня сортировка словаря тоже слегка насторожила. Погуглил - оказывается начиная с версии Питон 3.6 словарь сохраняет порядок элементов в порядке их добавления. В более ранних версиях такого нет.
привет. Здорово, что показываешь реальные задачи с реальными алгоритмами) Продолжай в том же духе). По коду хотелось бы добавить, что можно избавиться от конструкции if-else стандартным методом dict.setdefault(key, list()).append(value) - т.е. если значение ключа есть, то он будет добавлен в список, а если такого ключа нету, тогда будет создан такой ключ в словаре и в него уже добавлен value. Надеюсь понятно написал))
Можно просто subcategories_dict = defaultdict(list) Таким образом можно указать, что в словаре в качестве значений будут листы. И можно смело делать subcategories_dict['любой ключ'].append(sku)
Словарь по итогу отсортирован по ключу, как строке (1.10, 1.11 идут впереди 1.2), а нужно как по числу. В программе не хватает вот этого последнего штришка. :)
Просто мне не нужно было это. Это задача не учебная а реальная. Такой сортировки более чем достаточно, времени тратить на ненужную «досортировку» - смысла нет. И видео усложнять - тем более.
Как вы из Excel сводной таблицы будете выводить например не сайт? А через Python это реально. Пример, мини магазин, крохотный сайт с каталогом товаров. Продавцы забивают в Excel и данные автоматом появляются на сайте.
Здравствуйте! Сортировка не совсем корректная: 1.1 потом идут 1.10, 1.11, 1.12, а после 1.2, далее где еще есть два знака после точки в номере категории все таким же образом отсортировано Как сделать правильно не знаю) пусть знатоки подскажут😊
@@ringilendimion нет, нужно просто словарь словарей. И ключами делать целое число, что бы сортировать не как строки а как числа. Собственно по этому тут и проблема с сортировкой что он сортирует строки по сути. Даже если флоат то тоже не подходит. Нужно сделать двухуровневый словарь. Точнее он может быть тут любой глубины. Суть в том что бы категорию первую берем до первой точки, вторую между первой и второй точкой и так далее. И если категория оставшаяся больше не имеет дробной части то кладем сюда уже артикли
@@no101vmvможно воспользоваться параметром key функции sorted, и туда запихать свою функций, которая будет бить ключ словаря по пробелу, брать первый элемент и приводить его к float
@@oldcoders если в одной категории товары могут быть как с одинарной вложенностью так и с двойной и более - то возможно стоит ввести понятие обьекта категория у которой есть 2 поля. Подкатегория(по сути категория), возможно название текущей категории и итемы текущей категории. Подкатегория это такой же объект категории. Но это уже выглядит как отдельный урок
Привет! Спасибо за видео! По поводу наполнения словаря подкину еще один вариант. Можно воспользоваться методом get(), что бы избежать конструкции if-else: subcategories_dict[subcategory] = subcategories_dict.get(subcategory, [ ]) + [sku] т.е. перед тем как записать значение ключа мы проверяем что у нас там уже есть по этому ключу через get(), если ничего нет то применяется второй аргумент у get() что положить туда, если ничего не нашлось. В случае, если найдется, то мы к списку просто прибавим еще одно значение.
Спасибо за ответ. Когда я писал код попримеру в else выдавало ошибку, sku было стрингом, что не позволяло добавлять в него через аппенд. Твоё решение все исправило!
Спасибо большое, мне как новичку и самоучке, тяжело найти наглядный пример. А тут прям то что нужно! Понимаю что возможно не оптимальное решение, но сам процесс поиска ответов, очень помог мне. Ещё раз спасибо, для меня очень полезная информация! Судя по коментариям и я дед)
в 8:42 - чтобы посчитать кол-во столбцов - достаточно их выделить и посмотреть на "подсказку" которая будет появляться правее курсора. Подсказка вида: 1048576R x 12C
=УНИК(Таблица_товара[Подгруппа])&": "&BYROW(УНИК(Таблица_товара[Подгруппа]);LAMBDA(а;ОБЪЕДИНИТЬ(",";;ФИЛЬТР(Таблица_товара[Артикул];а=Таблица_товара[Подгруппа])))) С Уважением.
Было бы замечательно и профессионально, после выхода комментариев, создать следующее видео, автор решит ту же задачу, но учтёт полезные комментарии, и немного усложнить задачу. К примеру что-то запишет в один файл с таким именем, а что-то в другой файл с другим расширением в другом виде. Методов много, хочется примеры на все методы. Т.е. к примеру, четыре видео, и в них раскрыты все методы работы со строками на простой реальной программе! Это лучший канал для самообучения! В остальных видео много просто примеров, а здесь реальные программы! Спасибо за видео! Успехов каналу и ведущему! Жду новые видео по всем разделам Python, что бы можно было освоить их и вырасти от джуна до мидла!
Можно усовершенствовать программу, если добавить файл базы данных MySQL и в него писать необходимые значения и сохранять, переносить таким образом вместо файла ini. Ну и потом написать графический интерфейс, можно на Kivy для мультиплатформенности.
Дело в том что мне такой вариант совершенно не нужен. Ни графический интерфейс ни БД. У меня этот скрипт встроится в мое большое веб-приложение. И я там использую ini файлы чтобы не хардкодить, не записывать в код то, что может меняться в зависимости от разных ситуаций. Чтобы с приходом нового сезона например не переписывать основной код приложения. Просто обновил ini файл, изменил если надо руками, добавил что надо - и готово. Приложение работает с новым сезоном . Без залезания в код.
Всё хорошо, но маленький недочёт.. Сортировка отработала не совсем должным образом.. 1.1, 1.10.., 1.2.. Мне кажется должно было.. 1.1, 1.2, 1.10... и тд. :) Видео очень понравилось, особенно рубрика реальных задач. Большое спасибо за видео!
И вам спасибо! Дело в том что это реальная программа и я делал ее так, как нужно мне. Мне такой «неидеальной» сортировки достаточно. Если бы мне по какой то причине нужна была строгая сортировка - конечно я бы ее сделал.
Понял. А я не люблю лишние модули импортировать. Если чтото можно сделать на ядре Питона, без потери в быстродействии и времени разработки - делаю на ядре.
@@oldcoders это не доблесть! ядро питона специально очень ограниченное по сравнению с другими языками, именно для мотивации исполшьзовать сторонние быблиотэки )
Познавательно и круто! Спасибо за видео и разъяснения. Однако, я хотел бы уточнить пару моментов. 1-й - кроме макросов в Excel есть прекрасный ETL в виде PowerQuery, где тоже самое можно сделать при помощи интерфейса и нескольких кликов мышки. 2-ой - на 17:50 видно, что сортировка не идеальна, т.к. после. п.3.1. (20 строчка в IDE) идёт п.3.10. (21 строчка в IDE), а ещё ниже п.3.2. (26 стока в IDE). Подскажите, пожалуйста, как это скорректировать? Спасибо!
Да, можете почитать в комментариях, об этом уже рассуждали. Чуть более сложную сортировку пришлось бы делать. Например отделять номер от названия подкатегории, переводить его в тип float , сортировать его и т.д. Мне это было не нужно, такой первичной сортировки было достаточно.
В данном случае просто и необходимо использовать pandas. Считал таблицу в датафрейм, построил сводную в том же pandas и записал в новый датафрейм. Всё.
У меня ест многолетний опыт анализа данных в Excel. И эту задачу в Excel можно выполнить примерно за полторы минуты. Может 3 минуты. Загружаем всю таблицу в модель данных (Power Pivot). Создаём одну меру на DAX CONCATENATE. После чего выводу ее в сводную таблицу. Все. Выглядит гораздо быстрее чем способ на видео. А касаемо программирования... Я только в прошлом месяце начал учить Python для анализа данных. Знаю совсем немного. Но я бы в данном случае использовал бы Pandas. Подключился к таблице с переводом ее в DataFrame. Оставил бы только две нужные колонки. После чего загуглил (или чатгпт) как в Пандасе делать конкатинацию, так как такого ещё не учил. Мне кажется это будет проще и быстрее чем выщитывать номера колонок. А вдруг в следующей выгрузке добавиться колонка с новой информацией? Тогда номер колонки измениться и весь алгоритм пойдет лесом. А если привязаться к названию, то куда бы колонка не переехала, то ничего не поломается. Хотя может вмешаться человеческий фактор и измениться название колонки в таблице, но предусмотреть все невозможно.
Можно вместо списка для артикулов использовать множество, тогда в строке артикулов не будет повторений dict.setdefault(key, set()).add(value) А при выводе использовать f-строку вместо строки с "+" и вставить sorted() в join, потому что множество выдает свои элементы в случайном порядке string_values = ', '.join(sorted(value)) string_to_write = f'{key} = {string_values} '
Сортировка кривая, 1.1 и далее 1.10, а должен быть 1.2. Не факт что в таблице нет подкатегории с ошибкой в имени. Если нужно вывести категории и все арт. к ним, воспользуйся сводной таблицей. Python нужен для более сложных задач, а не для замены стандартного функционала excel. А так да, если времени много? тебя не торопят, можно и порочиться с rкодом в python. Спасибо за ролик.
Я также ловлю кайф от работы с python. Был тоже опыт работы с Excel: однажды получилась очень удачный и стройный скрипт - на штатный разработчик Excel/VB начал у меня выяснять где же основной модуль реализации и не поверил, что этот скрипт и был всей рабочей программой
В итоге, скрипт будет работать только с файлами подобной разметки, и если разметка изменится, то придётся лезть в исходный код и переделывать его, а когда файл изменится снова - придётся исправлять снова. Добавление поиска первой ячейки с данными ничуть не усложнит программу, но сделает её более универсальной.
Огромное спасибо! На работе часто используют Excel, и Python может очень помочь. Было бы ещё круче в конце видео записать данные в новый xlsx файл через цикл.
Берешь задачу - сортировка и подготовка данных из таблицы в 10000 строк, чтобы провести расчет и вывести результаты в word. Сначала пробуете на VBA, понимаете, что это полный изврат и переписываете на linq C#.... Profit.
Я бы так решил. Прикинул пару путей. в т.ч. и через возможности самого эксель. Посмотрел бы пару гайдов. Захотел эту задачку сделать сам. Прикинул сколько времени уйдет. Почесал репу. Написал бы тезисно ТЗ. Закинул 2-3м программистам на аутсорсе. Или даже одному кто онлайн. Взял бы оценку времени. Согласовал стоимость. Запустил бы в работу. опустим моменты некоторые.. тестанул бы сам и отдал пользователю. Получив ответ что все работает как надо, закрыл бы тиккет. ВОт, такой вот я программист))))
1. if else обычно стараются сократить. Я бы сделал "в случае если в словаре нет ключа" - создад запись с ключем где значение будет пустой массив. А потом аппендить туда значения без елсе. Мне так комфортнее) Не знаю кому как. Ну и еще одно замечание. А самое главное замечание кеоторое мне бросилось в глаза - сортировка не верная. Потому что саб категория должна сортироваться 1.1, 1.2, 1.3, ...., 1.10 а не 1.1, 1.10, 1.2. Для этого когда складываем в словарь можно сразу сделать category_dic и subcategory_dic и во втором писать только второе число подкатегории. И сортировать его как число а не как строку. В целом такая структура будет удобнее для дальнейшего использования.
Я бы словарь сортировал иначе, через генератор, как кто-то предложил If/else при записи можно заменить конструкцией dict[key] = dict.get(key, []) + [value] Если нет значения по ключу, он в него записывает пустой список и конкатенирует со списком значения Либо dict.setdefault(key, []).append(value) И при создании результирующей строки использовал f-string Получилось бы что-то типа String_write = f”{key} = {‘, ‘.join(value)} ” - здесь сразу список значений распаковывается в строку с разделителями) вообще познав однажды f-строки невозможно их разлюбить
В случае когда в самой таблице тебе не нужно работать с её оформлением или картинками в таблице, openpyxl лучше не использовать. Проще загрузить таблицу через pandas в DF и работать с DF, и дальше создать уникальный список подзаголовков, и собрать словарь артикулов, где ключ подзаголовок, значение список с артикулами.
Огромное спасибо за видео! Я только начал изучать Python и мне было очень интересно увидеть практическую пользу всего, что я изучаю 😂 Еще раз благодарю 👍🏻
Это конечно круто и мне было интересно посмотреть, но такую вещь очень легко сделать в сводной таблице excela)))) я думаю у меня было ушло на это максимум 15 минут)) Пс. Спасибо за информацию, было очень интересно
В openpyxl есть прекрасный метод save класса workbook. Формируете в памяти ваш workbook и потом его записываете. Посмотрите документацию openpyxl.readthedocs.io/en/stable/tutorial.html#data-storage
Возможно, если сниму опять про Эксель . Но вообще, нельзя только повторять за видеороликами, надо уметь искать в документации нужные вам вещи. Программист не должен ждать когда выйдет видео где говорится как сделать какую то вещь. Он должен сам находить решение.
всё отлично, объяснение и пример, но: 1) это скрипт, а не программа, т.к. используется императивный подход, впрочем, это уже вопрос семантики. 2) задача не выполнена, т.к. условие "и формирование нового .xlsx файла" в рамках видео не выполнено PyCharm (Win) - ctrl+b (и тоже для выхода обратно) для pop-up подсказки - достаточно ctrl+q (второе нажатие открывает сбоку вкладку Документации) - прыгать в исходник бывает излишне; а данная комбинация также подсказывает ваши функции и классы (и даже вашу документацию, если она присутствует и создана по правилам)
MaxRow в Экселе может не работать нормально. Поэтому не стоит на него в общем случае полагаться, как на конец данных. Нр, я проверял на пустоту с подсчётом пустот. Если их больше некого Х, значит это конец данных. Максроу может улетать ниже реального конца данных.
Братан зачем сочинять такие велосипеды с костылями Раз уж работаешь с товарами почему бы не использовать готовое решение с интеграцией в веб сайт 1С называется не понимаю люди просто ищут заморочки на банальных задачах
тоже на это обратил внимание. но вот как-то профики в екселе ценятся меньше чем начинающие в программировании. я просто реально столкнулся с тем что виртуозная работа в екселе обычно не впечатляет даже начинающего программиста - они могут сделать то же самое но другим инструментом.
@@maksimkolmykov296 потому что, я могу сам решить свою задачу без обращение к питонисту, если знаю эксель) если не знаю, то и в голову не придет, что так можно и насколько это легко. Это как "ты ж врач", с таким же посылом и обращаются к программистам. Тут смотря с какой стороны судить. Я имею ввиду, со стороны решения проблемы как таковой, а не со стороны поиска работы
Это канал для любителей программировать на питоне. А не для любителей экселя :) Я не говорю что для того чтобы решить такую задачу вам нужен будет Питон, других вариантов нет. Я говорю - что зная питон такая задача прекрасно решается.
Привет! Спасибо за видео! Классная идея с обучением на реальной задаче. Немного душных комментов по самому видосу - слишком много внимания берут на себя перебивки с музыкой, я бы музыку или подрезал или вообще убрал. Если добавить в начале что-то типа оглавления - так будет смотреть еще интереснее. Можно еще рассказать сколько времени заняла работа и сколько за это могут заплатить) спасибо за видос! Афтор пеши исчо
Есть же оглавление - разделы под видео. За такую программу никто платить не будет, это минимальный базовый уровень владения языком. Времени заняло минут 30. За советы спасибо!
Можно конечно. Просто мне это не нужно. Во первых я это только для себя делаю, зачем усложнять программу графическим интерфейсом. А во вторых - этот скрипт будет частью большого веб-приложения, там пользователь конечно уже будет нажимать на кнопку «загрузить подкатегории товаров» и выбирать файл.
Какое количество фреймворков необходимо знать для уровня джуниор? Или нужно выбрать область питона например, создание сайтов и один фреймворк - и насиловать только эту область? просто каждый фреймворк - какие то свои команды и тд и тп. Короче с каждым днем в попытке изучить питон я все больше не понимаю как люди устраиваются на работу....
Я пишу код как раз на VBA и так странно смотреть это видео. Вроде всё то же самое (sheets, worksheets, workbooks, cells) но по другому. Прям зловещая долина возникает в голове
Тоже про Pandas подумал. Но в исходном excel файле (в названии столбцов таблицы) заметил объединённые ячейки. У меня Pandas такое читать отказывается. Есть вообще способ открыть excel файл с объединёнными ячейками через Pandas?
Ой.. сделайте сами, там делов то. Или с работы любой файл возьмите. Или уж в крайнем случае погуглите, эксель файл скачать. Какой нибудь прайс лист найдется уж.
Почему не использовал Pandas? Это ж типа специально заточенная под такие задачи векторизованная библиотека, где подобные группировки и аггрегации делаются в одну строку. И повторюсь, библиотека векторизованная, все считается на наносекунды, никаких циклов. Чтение экселевских файлов и запись в них прилагается из коробки.
А как же завет программера - задачу надо сделать быстро и просто?🥴 если я на своих любимых плюсах буду пытаться решить эту задачу, погрязну надолго… для начала, с подбором библиотек для excel’я😉
Для меня это самый простой и быстрый путь. С экселем на питоне я работаю с самого начала. И потом, этот код я все равно делал как часть моего большого проекта, так что сейчас он работает у меня в Джанго-приложении.
Это вообще законно, объяснять так понятно и наглядно? )) Спасибо!
😆😆😆
Вы бы skillbox посмотрели как там наглядно про основы взлома показывали)).
@@Akkaunt__Yerjan есть на ютубе?) Подскажите, если да
@@Akkaunt__Yerjan помню вначале нулевых изучал фак по фриинету, будучи студентом безденежным, да ещё и музыкантом, вот у меня к пела голова😂 Научился инет добывать, да ещё и не обворовывая людей при этом :)) Данные для авторизации тырил конечно, проникая в компы через гостевой доступ для авторизации. И оказалось, что у прова мультилогины были у всех😅 РОЛ вроде это был😂
Ну здорово. И Питон и Эксель изучаю на Степик. Сейчас посмотрю Хекслет.
Офигенно, я сам финансист и начал изучать программирование. Не думал что python можно использовать в excel
Спасибо, очень интересно. Возможно ли сделать подобный видео-разбор с данными, которые бы писались в БД (желательно постгрес). Если бы еще на арендованном серваке было бы вдвойне полезно.
Я с БД только в Джанго работал, больше никак. В ролике про «Джанго часть 2» про это рассказывал. Но там не SQL, там ORM.
МНе так нравится фраза - Так все понятно - а я сижу и понимаю что тут сказать то и нечего если нечего не понятно )))
Чтобы понять это видео надо знать основы Python. Если с нуля то конечно ничего не понять.
01:02 в Задаче было создать новый файл с этой таблицей соответствия.
Ожидал увидеть новый файл таблицы ".xlsx", а реализовано в ".ini".
Мне нужен был именно ini файл.
В эксель сохранить ничего сложного, изменилась бы пара строчек.
когда записываешь данные в словарь удобнее использовать метод словаря get
Не с 7 строки, а со строки содержащую "Артикул" + 1. С такой остановкой не важно будет как создан файл exl. Да и со столбцом тоже надо описывать поиск. Это не сложно и позволит избежать ошибки в файле с номерами строк и столбцов.
Да, можно было. Просто у меня это была одноразовая задача, в приоритете - быстрота написания кода. В последующем я ее включу в большой свой проект - там да, именно так и буду делать - парсить заголовок по названию столбца.
@@oldcoders Я программирую, но не на Phyton, однако, заметил, что стоит сразу писать очевидные вещи, что-бы потом не забыть или не попасться на мелочи. И моя пометка больше к начинающим программировать. За урок, конечно, спасибо.
Спасибо! Продолжайте дальше)
Спасибо! отличное видео.
Рекомендуется создавать словарь функцией dict() - типа правило хорошего тона :)
Писать mydict = {} менее правильно чтоли? 🤔
спасибо! познавательно! но я б использовал pandas для работы с excel
Есть ролик и про pandas у меня
Как насчёт defaulteict from functools? Чтобы не развлекаться с условием проверки наличия ключа.
Да, defaultdict многие посоветовали, спасибо!
СИлами эксель тоже можно такое сделать
А у меня с самого начала эта программа не заработала, говорит AttributeError: module 'openpyxl' has no attribute 'load' =(((
А почему load а не load_workbook ?
задача для Power BI
Если вы программист и вам дали задачу налить чаю..
Что там дальше?
@@oldcoders Еще не выбрал библиотеку подходящую ))) Пришлось делать руками без кода.
Спасибо автору! Описан нормальный путь создания скрипта от постановки задачи до практической реализации в конкретной области. Использование простых конструкций позволяет понять происходящее для начального уровня, кому и предназначены эти видео.
Замечания в комментариях по улучшению предложенного кода расширяют кругозор. Их авторам также спасибо!
Нет необходимость так сортировать словарь (преобразования сортированного списка кортежей обратно в словарь) достаточно написать for key, value in sorted(subcategories_dict.items()): т.к. по сути словари это неупорядоченные последовательности. То что в последних версиях python перебор элементов словаря идёт по порядку их занесения в словарь, не гарантирует аналогичное поведение в более ранних версиях python
О, круто, спасибо!!
Меня сортировка словаря тоже слегка насторожила. Погуглил - оказывается начиная с версии Питон 3.6 словарь сохраняет порядок элементов в порядке их добавления. В более ранних версиях такого нет.
@@eugenedukatta9355 с версии 3.9
В очередной раз убеждаюсь, что реальные задачи намного интереснее и эффективнее. Нужно как-нибудь попробовать. Спасибо большое за видео!
привет. Здорово, что показываешь реальные задачи с реальными алгоритмами) Продолжай в том же духе). По коду хотелось бы добавить, что можно избавиться от конструкции if-else стандартным методом dict.setdefault(key, list()).append(value) - т.е. если значение ключа есть, то он будет добавлен в список, а если такого ключа нету, тогда будет создан такой ключ в словаре и в него уже добавлен value. Надеюсь понятно написал))
О, круто! Спасибо большое!!
@@oldcoders ещё удобно использовать defaultdict() стандартного модуля collections. Особенно если нужно получить вложенность в словаре наподобие json.
Можно просто subcategories_dict = defaultdict(list)
Таким образом можно указать, что в словаре в качестве значений будут листы. И можно смело делать subcategories_dict['любой ключ'].append(sku)
Класс!
Словарь по итогу отсортирован по ключу, как строке (1.10, 1.11 идут впереди 1.2), а нужно как по числу. В программе не хватает вот этого последнего штришка. :)
Просто мне не нужно было это. Это задача не учебная а реальная. Такой сортировки более чем достаточно, времени тратить на ненужную «досортировку» - смысла нет. И видео усложнять - тем более.
Дед, ты лучший!
Создаешь топовый контент!
Спасибо!
У Excel для решения подобной задачи без программирования есть собственный мощный инструмент - сводная таблица. Но пример полезный, спасибо.
👌 но у нас цель - программирование
Как вы из Excel сводной таблицы будете выводить например не сайт? А через Python это реально.
Пример, мини магазин, крохотный сайт с каталогом товаров. Продавцы забивают в Excel и данные автоматом появляются на сайте.
Здравствуйте! Сортировка не совсем корректная:
1.1 потом идут 1.10, 1.11, 1.12, а после 1.2, далее где еще есть два знака после точки в номере категории все таким же образом отсортировано
Как сделать правильно не знаю) пусть знатоки подскажут😊
Как вариант - сделать номера категорий с добавлением ведущего нуля: 1.01 вместо 1.1 и т.д.
@@ringilendimion нет, нужно просто словарь словарей. И ключами делать целое число, что бы сортировать не как строки а как числа. Собственно по этому тут и проблема с сортировкой что он сортирует строки по сути. Даже если флоат то тоже не подходит.
Нужно сделать двухуровневый словарь. Точнее он может быть тут любой глубины. Суть в том что бы категорию первую берем до первой точки, вторую между первой и второй точкой и так далее. И если категория оставшаяся больше не имеет дробной части то кладем сюда уже артикли
@@no101vmvможно воспользоваться параметром key функции sorted, и туда запихать свою функций, которая будет бить ключ словаря по пробелу, брать первый элемент и приводить его к float
Там еще засада - есть категории где две точки . Типа 3.2.6 брюки . Сложновато получится .
@@oldcoders если в одной категории товары могут быть как с одинарной вложенностью так и с двойной и более - то возможно стоит ввести понятие обьекта категория у которой есть 2 поля. Подкатегория(по сути категория), возможно название текущей категории и итемы текущей категории. Подкатегория это такой же объект категории. Но это уже выглядит как отдельный урок
Привет! Спасибо за видео! По поводу наполнения словаря подкину еще один вариант. Можно воспользоваться методом get(), что бы избежать конструкции if-else:
subcategories_dict[subcategory] = subcategories_dict.get(subcategory, [ ]) + [sku]
т.е. перед тем как записать значение ключа мы проверяем что у нас там уже есть по этому ключу через get(), если ничего нет то применяется второй аргумент у get() что положить туда, если ничего не нашлось. В случае, если найдется, то мы к списку просто прибавим еще одно значение.
Спасибо!! Возьму на заметку!
Для этого есть defaultdict чтобы такие кастыли не писать
Спасибо за ответ. Когда я писал код попримеру в else выдавало ошибку, sku было стрингом, что не позволяло добавлять в него через аппенд. Твоё решение все исправило!
Спасибо большое, мне как новичку и самоучке, тяжело найти наглядный пример. А тут прям то что нужно! Понимаю что возможно не оптимальное решение, но сам процесс поиска ответов, очень помог мне. Ещё раз спасибо, для меня очень полезная информация! Судя по коментариям и я дед)
в 8:42 - чтобы посчитать кол-во столбцов - достаточно их выделить и посмотреть на "подсказку" которая будет появляться правее курсора. Подсказка вида: 1048576R x 12C
Спасибо большое за ролик. Интересно слушать взрослых программистов.
для таких задач придуман numpy и pandas, где даже цикл выписывать не надо. именно эта задача может быть решена короче.
=УНИК(Таблица_товара[Подгруппа])&": "&BYROW(УНИК(Таблица_товара[Подгруппа]);LAMBDA(а;ОБЪЕДИНИТЬ(",";;ФИЛЬТР(Таблица_товара[Артикул];а=Таблица_товара[Подгруппа]))))
С Уважением.
Было бы замечательно и профессионально, после выхода комментариев, создать следующее видео, автор решит ту же задачу, но учтёт полезные комментарии, и немного усложнить задачу. К примеру что-то запишет в один файл с таким именем, а что-то в другой файл с другим расширением в другом виде. Методов много, хочется примеры на все методы. Т.е. к примеру, четыре видео, и в них раскрыты все методы работы со строками на простой реальной программе! Это лучший канал для самообучения! В остальных видео много просто примеров, а здесь реальные программы! Спасибо за видео! Успехов каналу и ведущему! Жду новые видео по всем разделам Python, что бы можно было освоить их и вырасти от джуна до мидла!
Спасибо! Я тоже думаю о том, чтобы изменить программы с учётом советов, данных в комментариях, и записать видео об этом .
@@oldcoders 🤝🤝🤝
Можно усовершенствовать программу, если добавить файл базы данных MySQL и в него писать необходимые значения и сохранять, переносить таким образом вместо файла ini. Ну и потом написать графический интерфейс, можно на Kivy для мультиплатформенности.
Дело в том что мне такой вариант совершенно не нужен. Ни графический интерфейс ни БД. У меня этот скрипт встроится в мое большое веб-приложение. И я там использую ini файлы чтобы не хардкодить, не записывать в код то, что может меняться в зависимости от разных ситуаций. Чтобы с приходом нового сезона например не переписывать основной код приложения. Просто обновил ini файл, изменил если надо руками, добавил что надо - и готово. Приложение работает с новым сезоном . Без залезания в код.
@@oldcoders а почему ini файлы, а не тот же json?
Всё хорошо, но маленький недочёт.. Сортировка отработала не совсем должным образом.. 1.1, 1.10.., 1.2.. Мне кажется должно было.. 1.1, 1.2, 1.10... и тд. :) Видео очень понравилось, особенно рубрика реальных задач. Большое спасибо за видео!
И вам спасибо! Дело в том что это реальная программа и я делал ее так, как нужно мне. Мне такой «неидеальной» сортировки достаточно.
Если бы мне по какой то причине нужна была строгая сортировка - конечно я бы ее сделал.
@@oldcoders понял, в целом я конечно так и подумал) Я в таких ситуациях использую сортировку natsort :)
Понял. А я не люблю лишние модули импортировать. Если чтото можно сделать на ядре Питона, без потери в быстродействии и времени разработки - делаю на ядре.
@@oldcoders это не доблесть! ядро питона специально очень ограниченное по сравнению с другими языками, именно для мотивации исполшьзовать сторонние быблиотэки )
Спасибо! Не пробовал работать с pprint и было интересно про чтение данных из ексель, применю в работе и автоматизирую процессы
Материал изложен в доступной для понимания форме. Спасибо.
Познавательно и круто! Спасибо за видео и разъяснения. Однако, я хотел бы уточнить пару моментов. 1-й - кроме макросов в Excel есть прекрасный ETL в виде PowerQuery, где тоже самое можно сделать при помощи интерфейса и нескольких кликов мышки. 2-ой - на 17:50 видно, что сортировка не идеальна, т.к. после. п.3.1. (20 строчка в IDE) идёт п.3.10. (21 строчка в IDE), а ещё ниже п.3.2. (26 стока в IDE). Подскажите, пожалуйста, как это скорректировать? Спасибо!
Да, можете почитать в комментариях, об этом уже рассуждали. Чуть более сложную сортировку пришлось бы делать. Например отделять номер от названия подкатегории, переводить его в тип float , сортировать его и т.д.
Мне это было не нужно, такой первичной сортировки было достаточно.
Спасибо за клевую практику и прикладное применение всех этих циклов, словарей и джоинов!!!!
тоже раньше так ипался пока не узнал про pandas)
В данном случае просто и необходимо использовать pandas. Считал таблицу в датафрейм, построил сводную в том же pandas и записал в новый датафрейм. Всё.
Да, я так тоже делаю. Одно из следующих видео будет про пандас.
У меня ест многолетний опыт анализа данных в Excel. И эту задачу в Excel можно выполнить примерно за полторы минуты. Может 3 минуты. Загружаем всю таблицу в модель данных (Power Pivot). Создаём одну меру на DAX CONCATENATE. После чего выводу ее в сводную таблицу. Все. Выглядит гораздо быстрее чем способ на видео.
А касаемо программирования... Я только в прошлом месяце начал учить Python для анализа данных. Знаю совсем немного. Но я бы в данном случае использовал бы Pandas. Подключился к таблице с переводом ее в DataFrame. Оставил бы только две нужные колонки. После чего загуглил (или чатгпт) как в Пандасе делать конкатинацию, так как такого ещё не учил. Мне кажется это будет проще и быстрее чем выщитывать номера колонок. А вдруг в следующей выгрузке добавиться колонка с новой информацией? Тогда номер колонки измениться и весь алгоритм пойдет лесом. А если привязаться к названию, то куда бы колонка не переехала, то ничего не поломается. Хотя может вмешаться человеческий фактор и измениться название колонки в таблице, но предусмотреть все невозможно.
А какая библиотека для вывода в эксель из питона?
Можно вместо списка для артикулов использовать множество, тогда в строке артикулов не будет повторений
dict.setdefault(key, set()).add(value)
А при выводе использовать f-строку вместо строки с "+" и вставить sorted() в join, потому что множество выдает свои элементы в случайном порядке
string_values = ', '.join(sorted(value))
string_to_write = f'{key} = {string_values}
'
👍👍 спасибо
А если через метод get?
@@S_putnik Через метод get мне нравится больше
к тому же множества работают быстрее списков)
@@IvanIvanov-rp6ogкак помню, если ключа нет то выводит ошибку
Спасибо! Хороший пример. Решал недавно задачу с курса по работе с файлами, тут практически то же самое)
Я бы делал через библиотеку pandas:
import pandas as pd
df = pd.read_excel("Бланк заказа.xlsx", skiprows=5, usecols=[1, 11])
df = df.dropna()
df = df.groupby(df.columns[1])[df.columns[0]].apply(list).reset_index()
data_dict = df.set_index(df.columns[0]).to_dict()[df.columns[1]]
data_dict - уже отсортированный по ключам словарь
Листал комментарии, искал кто же напишет в 7 строк на пандас
Сортировка кривая, 1.1 и далее 1.10, а должен быть 1.2. Не факт что в таблице нет подкатегории с ошибкой в имени. Если нужно вывести категории и все арт. к ним, воспользуйся сводной таблицей. Python нужен для более сложных задач, а не для замены стандартного функционала excel. А так да, если времени много? тебя не торопят, можно и порочиться с rкодом в python. Спасибо за ролик.
Используйте f-строки, а не конкатенацию в чистом виде,f-строки прекрасны! Спасибо за ролик!
Очень хорошее и информативное видео. Спасибо - шикарная работа !!!!!
Ждем 3 часть про Python Django
Я также ловлю кайф от работы с python. Был тоже опыт работы с Excel: однажды получилась очень удачный и стройный скрипт - на штатный разработчик Excel/VB начал у меня выяснять где же основной модуль реализации и не поверил, что этот скрипт и был всей рабочей программой
Объяснение, подача, реальные задачи, вы просто популяризатор программирования!
Видео еще не смотрела, думаю, там все как всегда очень хорошо, но елочка на батарее очень милая, спасибо за настроение ☺️🧡
☺️🎄
В итоге, скрипт будет работать только с файлами подобной разметки, и если разметка изменится, то придётся лезть в исходный код и переделывать его, а когда файл изменится снова - придётся исправлять снова. Добавление поиска первой ячейки с данными ничуть не усложнит программу, но сделает её более универсальной.
Да, все так. Тем не менее не стал усложнять.
Супер! Если еще будут примеры работы питона с экселем, по возможности, пжт, выкладывайте. Очень интересно) Спасибо!
👌 Есть еще одно видео на канале у меня, посмотрите, pandas + excel
питон это кнчн хорошо, но главное имхо - делать быстро и результативно. И эта таска элементарно решается за 3-5 минут сугубо экселем :)
Еще вариант - поручить кому то сделать эту задачу. Еще эффективнее.
годный , полезный и внятный контент! но на кой такой уровень громкости на музыкальных вставках?!!! 🤦♂
Блиииин, я несколько раз проверял, выверял громкость, снизил громкость вставок процентов на 40 от оригинальной, и все равно громко? ☹️
Огромное спасибо!
На работе часто используют Excel, и Python может очень помочь.
Было бы ещё круче в конце видео записать данные в новый xlsx файл через цикл.
Я люблю программирование. Но дальше теории никак не двинусь и по этому получаю удовольствие от просмотра таких роликов
Поставьте себе задачу, очень простую. И решите ее.
Если совсем нет задач - решайте их на codewars.
Какой смысл знать теорию и не использовать ее?
Берешь задачу - сортировка и подготовка данных из таблицы в 10000 строк, чтобы провести расчет и вывести результаты в word. Сначала пробуете на VBA, понимаете, что это полный изврат и переписываете на linq C#.... Profit.
Попробуй заняться микроконтроллерами. Esp32 + micropython. Дёшево и сердито, вдруг в тебе спит гений
Теория нужна что бы практика лучше давалась. Но основное все же практика а не теория на старте карьеры особенно
Я бы так решил. Прикинул пару путей. в т.ч. и через возможности самого эксель. Посмотрел бы пару гайдов. Захотел эту задачку сделать сам. Прикинул сколько времени уйдет. Почесал репу. Написал бы тезисно ТЗ. Закинул 2-3м программистам на аутсорсе. Или даже одному кто онлайн. Взял бы оценку времени. Согласовал стоимость. Запустил бы в работу. опустим моменты некоторые.. тестанул бы сам и отдал пользователю. Получив ответ что все работает как надо, закрыл бы тиккет. ВОт, такой вот я программист))))
Никогда Python не заменит VBA, смирись с этим и учи VBA )))
Нет 😀
1. if else обычно стараются сократить. Я бы сделал "в случае если в словаре нет ключа" - создад запись с ключем где значение будет пустой массив. А потом аппендить туда значения без елсе. Мне так комфортнее) Не знаю кому как. Ну и еще одно замечание.
А самое главное замечание кеоторое мне бросилось в глаза - сортировка не верная. Потому что саб категория должна сортироваться 1.1, 1.2, 1.3, ...., 1.10 а не 1.1, 1.10, 1.2.
Для этого когда складываем в словарь можно сразу сделать category_dic и subcategory_dic и во втором писать только второе число подкатегории. И сортировать его как число а не как строку. В целом такая структура будет удобнее для дальнейшего использования.
Тоже делал подобную штуку для работы. Я это назвал прокинутым ВПР. Моя первая полезная программа))😊
Я бы воспользовался defaultdict из модуля collections тем самым объявив бы values словаря с типом list
Я бы словарь сортировал иначе, через генератор, как кто-то предложил
If/else при записи можно заменить конструкцией dict[key] = dict.get(key, []) + [value]
Если нет значения по ключу, он в него записывает пустой список и конкатенирует со списком значения
Либо dict.setdefault(key, []).append(value)
И при создании результирующей строки использовал f-string
Получилось бы что-то типа
String_write = f”{key} = {‘, ‘.join(value)}
” - здесь сразу список значений распаковывается в строку с разделителями) вообще познав однажды f-строки невозможно их разлюбить
Эх я бы на vba спокойной сделал
Очень полезно и в отличном темпе для начинающе-продолжающих! Спасибо! Подписка однозначно
В случае когда в самой таблице тебе не нужно работать с её оформлением или картинками в таблице, openpyxl лучше не использовать. Проще загрузить таблицу через pandas в DF и работать с DF, и дальше создать уникальный список подзаголовков, и собрать словарь артикулов, где ключ подзаголовок, значение список с артикулами.
Огромное спасибо за видео! Я только начал изучать Python и мне было очень интересно увидеть практическую пользу всего, что я изучаю 😂 Еще раз благодарю 👍🏻
Это конечно круто и мне было интересно посмотреть, но такую вещь очень легко сделать в сводной таблице excela)))) я думаю у меня было ушло на это максимум 15 минут))
Пс. Спасибо за информацию, было очень интересно
Хорошее видео с ходом рассуждения и реальный код👍
Имеет смысл ТОЛЬКО для образования. В реальной работе, с целью рационального использования рабочего времени, делается за 1 минуту внутри.
Python - это конечно здорово. Но такую задачу я бы предпочёл решать с помощью Power Query.
У нас цель - изучение и использование на практике Питона
Я бы отсортировал ещё и артикулы:
for value in sorteddict.values()
value.sort()
Спасибо за видео. Но, не понятно, как записать в эксель полученные данные?
В openpyxl есть прекрасный метод save класса workbook.
Формируете в памяти ваш workbook и потом его записываете.
Посмотрите документацию openpyxl.readthedocs.io/en/stable/tutorial.html#data-storage
@@oldcoders так отразите это в ролике, спасибо большое.
Возможно, если сниму опять про Эксель . Но вообще, нельзя только повторять за видеороликами, надо уметь искать в документации нужные вам вещи. Программист не должен ждать когда выйдет видео где говорится как сделать какую то вещь. Он должен сам находить решение.
всё отлично, объяснение и пример, но:
1) это скрипт, а не программа, т.к. используется императивный подход, впрочем, это уже вопрос семантики.
2) задача не выполнена, т.к. условие "и формирование нового .xlsx файла" в рамках видео не выполнено
PyCharm (Win) - ctrl+b (и тоже для выхода обратно)
для pop-up подсказки - достаточно ctrl+q (второе нажатие открывает сбоку вкладку Документации) - прыгать в исходник бывает излишне; а данная комбинация также подсказывает ваши функции и классы (и даже вашу документацию, если она присутствует и создана по правилам)
my_dict.setdefault(key, []).append(value)
Очень круто и полезно!
з.ы.: Все еще жду 3ю часть по Джанго 🙃 С Новым Годом!
Будет, будет.. собираюсь с силами .. 😀
@@oldcoders Дай Вам всевышний сил немеренно для благого дела! А мы очень ждем!!!
MaxRow в Экселе может не работать нормально. Поэтому не стоит на него в общем случае полагаться, как на конец данных.
Нр, я проверял на пустоту с подсчётом пустот. Если их больше некого Х, значит это конец данных. Максроу может улетать ниже реального конца данных.
А когда вы будете продолжения по Django делать ?
Буду, буду. Собираюсь с силами
@@oldcoders Спасибо вам большое за ваши труды, дай Бог вам силы продолжать снимать видео про Python и Django
Братан зачем сочинять такие велосипеды с костылями Раз уж работаешь с товарами почему бы не использовать готовое решение с интеграцией в веб сайт 1С называется не понимаю люди просто ищут заморочки на банальных задачах
Сейчас народ пинками будут загонять на "Мой офис" с LUA. Excel c Python - для развлечения.
Можно было через умные и сводные таблицы)
Значения лучше бы тоже сортировали, чисто на будущее.
А то ведь добавлять, если надо будет тоже замучаетесь искать ))
Кстати да, точно !! Можно было бы!
У вас "некорректно" отсортировался список. Например на ua-cam.com/video/eEbi7wdZNV4/v-deo.html видно, что после 6.1 идет запись 6.10 :)
Написал аналогичную программку, но обработку моих 2000 сток выполняет 26 минут. Куда копать?
Всё же конкретно в этом случае, в экселе это делается за 2 клика через сводную таблицу в прямом смысле за 10 секунд
тоже на это обратил внимание. но вот как-то профики в екселе ценятся меньше чем начинающие в программировании. я просто реально столкнулся с тем что виртуозная работа в екселе обычно не впечатляет даже начинающего программиста - они могут сделать то же самое но другим инструментом.
@@maksimkolmykov296 потому что, я могу сам решить свою задачу без обращение к питонисту, если знаю эксель) если не знаю, то и в голову не придет, что так можно и насколько это легко. Это как "ты ж врач", с таким же посылом и обращаются к программистам. Тут смотря с какой стороны судить. Я имею ввиду, со стороны решения проблемы как таковой, а не со стороны поиска работы
Это канал для любителей программировать на питоне. А не для любителей экселя :)
Я не говорю что для того чтобы решить такую задачу вам нужен будет Питон, других вариантов нет.
Я говорю - что зная питон такая задача прекрасно решается.
Привет! Спасибо за видео! Классная идея с обучением на реальной задаче. Немного душных комментов по самому видосу - слишком много внимания берут на себя перебивки с музыкой, я бы музыку или подрезал или вообще убрал. Если добавить в начале что-то типа оглавления - так будет смотреть еще интереснее. Можно еще рассказать сколько времени заняла работа и сколько за это могут заплатить) спасибо за видос! Афтор пеши исчо
Есть же оглавление - разделы под видео. За такую программу никто платить не будет, это минимальный базовый уровень владения языком. Времени заняло минут 30. За советы спасибо!
Тоже иногда пишу вспомогательные программы. Но с помощью чата gpt.
А можно приделать какой то интерфейс к этой программе, что бы пользователь нажимал кнопочки, загружал файл и на выходе получал отсортированный эксель
Можно конечно. Просто мне это не нужно. Во первых я это только для себя делаю, зачем усложнять программу графическим интерфейсом.
А во вторых - этот скрипт будет частью большого веб-приложения, там пользователь конечно уже будет нажимать на кнопку «загрузить подкатегории товаров» и выбирать файл.
сортировка была строковой, то есть 3.1 далее 3.10 потом 3.2 и так далее
Очень хотелось бы, что бы автор дал ссылку на exel файл для препарировния, а то мне, например, на своем компе такой взять негде...
Сделаю сделаю, меня просили уже о нем, щас просто пока форс мажор небольшой. Напишу когда выложу его.
Выложил github.com/break-and-enter/oldcodersclub.git
@@oldcoders Супер! Огромное спасибо!
Поглядите в сторону pandas, сразу есть функционал группировок. Крутое видео, так держать!
Да, я пандас использую, но про него будет отдельное видео
@@oldcoders можно показать, как другой библиотекой модно решить туже задачу
Что-то типа того, да
Я один залез в комментарии, что бы узнать, как посмотреть описание функции или метода на виндовс? 😁 Вообщем сочетание "Ctrl + B".
О, гран мерси !
в excel это решается в два клика сводной таблицей
Какое количество фреймворков необходимо знать для уровня джуниор? Или нужно выбрать область питона например, создание сайтов и один фреймворк - и насиловать только эту область? просто каждый фреймворк - какие то свои команды и тд и тп. Короче с каждым днем в попытке изучить питон я все больше не понимаю как люди устраиваются на работу....
Именно для ответа на ваши вопросы я снял видео:
ua-cam.com/video/Fo3SH_G0kKI/v-deo.htmlsi=HV7ORbZ03HSfVxTb
Я пишу код как раз на VBA и так странно смотреть это видео. Вроде всё то же самое (sheets, worksheets, workbooks, cells) но по другому. Прям зловещая долина возникает в голове
Если все легко решаете на VBA, то конечно им и надо пользоваться.
Библиотека Pandas имеет хороший функционал по таблицам, выборкам, группировкам, вводу/выводу файлов и т.д. Спасибо за видео!
Да, я ее использую. В этом видео нет.
Тоже про Pandas подумал. Но в исходном excel файле (в названии столбцов таблицы) заметил объединённые ячейки. У меня Pandas такое читать отказывается.
Есть вообще способ открыть excel файл с объединёнными ячейками через Pandas?
Маркировать пункты списка бокалами пива - это отличная идея.
Шалю немного :)
Приветствую. А где можно скачать такой ексель файлик для примера?
Ой.. сделайте сами, там делов то. Или с работы любой файл возьмите. Или уж в крайнем случае погуглите, эксель файл скачать. Какой нибудь прайс лист найдется уж.
Сортировка в ini применилась некорректно: 1.1, 1.11, 1.12, 1.2 и т.д.
Да, но этого было достаточно, не хотелось усложнять
Почему не использовал Pandas? Это ж типа специально заточенная под такие задачи векторизованная библиотека, где подобные группировки и аггрегации делаются в одну строку.
И повторюсь, библиотека векторизованная, все считается на наносекунды, никаких циклов. Чтение экселевских файлов и запись в них прилагается из коробки.
Я использую пандас в других задачах, про них тоже будет видео
А как же завет программера - задачу надо сделать быстро и просто?🥴 если я на своих любимых плюсах буду пытаться решить эту задачу, погрязну надолго… для начала, с подбором библиотек для excel’я😉
Для меня это самый простой и быстрый путь. С экселем на питоне я работаю с самого начала.
И потом, этот код я все равно делал как часть моего большого проекта, так что сейчас он работает у меня в Джанго-приложении.