Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 18, 2017 23:24:03

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Создание спиков на лету.

Stazot
Может я что то не допонял?
Конечно недопоняли. Или мы недопоняли. У вас вход таблица. Выход тоже таблица. Откуда тут xml взялся?

Вот входная строка:
 Шаровые опоры™555;555;SBN252;555-SB-N252_опора шаровая!\ Nissan Navara D40T 07>;SBN252_555
Вот выходная строка:
 Двигатель;Шаровые опоры;опора шаровая;Nissan;Navara, D40T 07;SBN252_555
Например откуда в выходной строке взялось слово Двигатель? Почему Nissan от Navara надо отделить
Navara от D40T 07 нет? Как вы поняли что ™555;555;SBN252;555-SB-N252_ надо выкинуть?
Откуда взялся K:\python\test.xml что там лежит?

Stazot
я просто подумал что для того что бы вложенность описать удобнее Xml формат использовать
Вложенность описать можно миллионом способов. xml Не самый удачный. Кроме того тут вложенность на мой взгляд небольшой и не очень важный довесок без которого легко можно обойтись.
Более того XML не подходит в данной задаче по причине того что ваши данные не являются древовидной структурой. Многие детали унифицированы и подходят для нескольких мест в классификации.

Например болт M10*60 (лампочки, дворники, масло, омывайку и так далее) можно вкрутить в разные автомобили в разные места. Посему в файле он или должен появиться во многих местах… или там должны быть ссылки на один нод, что в xml нельзя сделать родными средствами.

Опишите задачу более осмысленно. Например: разрабатываемая система должна поставлять данные на сайт или в приложение которое показывает каталог товаров в древовидном представлении. Кроме того необходим учет остатка, чтобы вовремя восполнить запасы и дать возможность обслуживающему персоналу уменьшать количество товара при его покупке и увеличивать при поставках.

Тогда из описания этих действий и предполагаемого объема данных и интенсивности изменений можно будет посоветовать схему хранения. Для описанного примера это будет реляционная база данных или работа с объектами питона в памяти с логгированием изменений.





Отредактировано doza_and (Сен. 18, 2017 23:30:30)

Офлайн

#2 Сен. 19, 2017 00:44:23

Stazot
Зарегистрирован: 2017-08-07
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание спиков на лету.

vic57
Спасибо но не то, мне нужно в таком виде

 Словарь = {'Категория1':{
                                       'Подкатегория1':[
                                                               "Критерий1", "Критерий2",...,"критерийn"],
                                       'Подкатегория2':[
                                                               "Критерий2", "Критерий2",...,"критерийn"]},
                 'Категория2':{
                                       'Подкатегория1.2':[
                                                                 "Критерий1", "Критерий2",...,"критерийn",
                                       'Подкатегория2.2':[
                                                                 "Критерий2", "Критерий2",...,"критерийn"]}}}

Офлайн

#3 Сен. 19, 2017 01:03:06

Stazot
Зарегистрирован: 2017-08-07
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание спиков на лету.

doza_and
Дело в том что глубина вложености для простоты взята за три ступени. но вот критерив может быть много
Структура как раз древовидная

категория
подкатегория
критерий
критерий
критерий
критерий
критерий
подкатегория
критерий
критерий
категория
подкатегория
критерий
критерий
критерий

подкатегория
критерий
критерий
по поводу как вычленить какие болты куда их отнести, тут надо множественно брать критерии и по категории и названию и т.д.
Это пока не требуется
Основная задача разделить список на 10-12 основных категорий. 5-20 подкатегорий. Если не XML то что? Я просто ничего подходящего не знаю. Можно конечно в скрипт вшить список, но это не интересно.

Офлайн

#4 Сен. 19, 2017 01:06:09

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Создание спиков на лету.

Stazot
непонятно, что ты изобретаешь

 ~ admin$ pip search xml2dict
nitrate_xml2dict (0.2.2.1)  - Convert between XML String and Python Dict
nitratexml2dict (0.2.2)     - Convert between XML String and Python Dict
pyxml2dict (1.0.1)          - Convert XML to python Dict
XML2Dict (0.2.2)            - Convert between XML String and Python Dict
xml2dictnitrate (0.2.2)     - Convert between XML String and Python Dict

Офлайн

#5 Сен. 19, 2017 02:27:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Создание спиков на лету.

Stazot
Идея проста. есть CSVшный файл
Шаровые опоры™555;555;SBN252;555-SB-N252_опора шаровая!\ Nissan Navara D40T 07>;SBN252_555
Наконечники рулевых тяг™555;555;SE1651L;555-SE-1651L_наконечник рулевой левый!\ Mazda 3 BK 03>;SE1651L_555;SE-1651L
И так порядка 300 000 строк.
Надо привести к след виду
Двигатель;Шаровые опоры;опора шаровая;Nissan;Navara, D40T 07;SBN252_555
Двигатель;Наконечники рулевых тяг;наконечник рулевой левый;Mazda;3,BK,03

Значит, как я понял:
1) У тебя есть csv-файл со строками вида
Шаровые опоры™555;555;SBN252;555-SB-N252_опора шаровая!\ Nissan Navara D40T 07>;SBN252_555
2) У тебя есть xml-файл в виде
<root>
<category name = "Электрика">Электрика
<sub_category name = 'Лампы'>
<element>H3</element>
<element>H4</element>
<element>H6</element>
<element>галоген</element>
<element>Ксенон</element>
</sub_category>
<sub_category name = 'Реле'> Реле
<element>реле зажигания</element>
<element>реле поворотников</element>
</sub_category>
</category>
...
3) И ты хочешь из этого csv-файла и этого xml-файла получить csv-файл строк вида
Двигатель;Шаровые опоры;опора шаровая;Nissan;Navara, D40T 07;SBN252_555
Где поля: “Двигатель”, “Шаровые опоры”, “опора шаровая”, - берутся из xml-файла.
Где поля: “Nissan”, “Navara, D40T 07”, “SBN252_555”, - берутся из csv-файла.


Проверь, правильно ли всё я записал.



Отредактировано py.user.next (Сен. 19, 2017 02:35:17)

Офлайн

#6 Сен. 19, 2017 07:11:05

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Создание спиков на лету.

Stazot
Основная задача разделить список на 10-12 основных категорий. 5-20 подкатегорий
Я так понимаю как его разделять пока не обсуждается. По крайней мере понять как вы это собираетесь делать невозможно и вы про это не рассказываете.

Stazot
Если не XML то что? Я просто ничего подходящего не знаю. Можно конечно в скрипт вшить список, но это не интересно.

Вопрос в том почему и чем оно вам неинтересно в код вшить? Неудобно вручную редактировать? Вы потом программу скроете и людей заставите этот файл редактировать? Если оно работает вполне нормальный подход в код вшить.

По поводу альтернатив
Файл одного из распространенных форматов yaml:
 # а это комментарий
Категория1  :
   Подкатегория1 : [Критерий1, Критерий2, критерий3]
   Подкатегория2 : [Критерий1, Критерий2, критерий3]
Категория2  :
   Подкатегория1.1 : [Критерий1, Критерий2, "критерий3 с запятыми,,,"]
   Подкатегория1.2 : [Критерий1, Критерий2, критерий3]
в командной строке операционной системы набираете pip install pyyaml это установит вам поддержку yaml
 import yaml
with open("some.yaml","r", encoding="utf-8") as f:
    category_data = yaml.load(f)
category_data ,будет именно в том виде какой вы запросили. Вложенность произвольная. кода две строчки. В отличии от кода на питоне набирать поудобнее нет кавычек и лишних скобок.
Если потом надо будет выделить общие товары, то формат поддерживает ссылки из коробки. В отличии от xml если вы напишете
 Категория1  :
      цена : 35.5
      количество : 5
Категория2  :
      цена : 80.5
      количество : 5

то потом можете использовать например для получения примерной стоимости товаров на складе:

 s = 0
for v in category_data.values():
    s+= v["цена"] * v["количество"] 

Т.е. в отличии от xml типы уже родные и не надо явно их из строк получать.
 s+= float(v["цена"]) * int(v["количество"]) 

В питон встроен модуль json файл выглядит аналогично, но строки должны быть в кавычках, а словари заключаются в фигурные скобки. можете его использовать.



Отредактировано doza_and (Сен. 19, 2017 07:16:37)

Офлайн

#7 Сен. 19, 2017 13:00:25

Stazot
Зарегистрирован: 2017-08-07
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание спиков на лету.

doza_and
Спасибо про YAML не знал

Офлайн

#8 Сен. 21, 2017 20:49:52

Stazot
Зарегистрирован: 2017-08-07
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание спиков на лету.

Уже не по теме, но может кто кинет ссылку как реализовать поиск как web поисковик что бы искать по фразе полностью и словам из фразы по отдельности.
Интересно было бы почитать. Что то случайно в голову взбрела мысля.

Офлайн

#9 Сен. 22, 2017 17:43:35

Stazot
Зарегистрирован: 2017-08-07
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание спиков на лету.

Всем спасибо. Закрываю тему

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version