Уведомления

Группа в Telegram: @pythonsu

#1 Июль 21, 2014 22:13:24

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Как разбить строку?

Seganapa
Например из такой строки

Так?

Запчасти кузова | -Детали кузова / крыло / буфер | --Продольная / поперечная балка |
Запчасти кузова | -Детали кузова / крыло / буфер | --Колесная ниша |
Запчасти кузова | -Детали кузова / крыло / буфер | --Накладки порога / двери |
Запчасти кузова | -Детали кузова / крыло / буфер | --Боковина |
Запчасти кузова | -Детали кузова / крыло / буфер | --Крыло / навесные части |
Запчасти кузова | -Детали кузова / крыло / буфер | --Обшивка кузова |
Запчасти кузова | -Крышки багажника / капоты / двери / складная крыша | --Двери / составляющие |
Запчасти кузова | -Дополнительная фара / комплектующие | --Противотуманная фара / комплектующие | ---Противотуманная фара лампа накаливания |
Запчасти кузова | -Дополнительная фара / комплектующие | --Фара дальнего света / комплектующие | ---Лампа накаливания фара дальнего света |
Запчасти кузова | -Система освещения / световые приборы | --Габаритный огонь / комплектующие | ---Лампа накаливания фара дальнего света |
Запчасти кузова | -Система освещения / световые приборы | --Габаритный огонь / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Система освещения / световые приборы | --Фонарь стоп-сигнала / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Система освещения / световые приборы | --Фонарь указателя поворота / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Система освещения / световые приборы | --Фонарь освещения номерного знака / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Система освещения / световые приборы | --Задняя противотуманная фара / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Система освещения / световые приборы | --Фара заднего хода / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Система освещения / световые приборы | --Фонарь, установленный в двери |
Запчасти кузова | -Основная фара / комплектующие | --Лампа накаливания основной фары |
Запчасти кузова | -Запчасти передней части кузова | --Основная фара / комплектующие | ---Лампа накаливания основной фары |
Запчасти кузова | -Запчасти передней части кузова | --Противотуманная фара / комплектующие | ---Противотуманная фара лампа накаливания |
Запчасти кузова | -Запчасти передней части кузова | --Фара дальнего света / комплектующие | ---Лампа накаливания фара дальнего света |
Запчасти кузова | -Запчасти передней части кузова | --Фонарь указателя поворота / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Запчасти передней части кузова | --Детали крепления | ---Упругие элементы |
Запчасти кузова | -Запчасти передней части кузова | --Колесная ниша |
Запчасти кузова | -Кабина пассажира | --Накладки порога / двери |
Запчасти кузова | -Кабина пассажира | --Двери / составляющие |
Запчасти кузова | -Кабина пассажира | --Боковина |
Запчасти кузова | -Кабина пассажира | --Топливный бак |
Запчасти кузова | -Запчасти задней части кузова | --Габаритный огонь / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Запчасти задней части кузова | --Фонарь стоп-сигнала / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Запчасти задней части кузова | --Фонарь указателя поворота / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Запчасти задней части кузова | --Фонарь освещения номерного знака / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Запчасти задней части кузова | --Задняя противотуманная фара / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Запчасти задней части кузова | --Фара заднего хода / комплектующие | ---Лампа накаливания |
Запчасти кузова | -Запчасти задней части кузова | --Облицовка |
Запчасти кузова | -Запчасти задней части кузова | --Колесная ниша |
Запчасти кузова | -Запчасти задней части кузова | --Топливный бак |
Запчасти кузова | -Запчасти задней части кузова | --Крыло / навесные части |
Запчасти кузова | -Запчасти задней части кузова | --Боковина |
Запчасти кузова | -Запчасти задней части кузова | --Задняя дверь / детали |
Запчасти кузова | -Топливный бак |
Запчасти кузова | -Упругие элементы |



Офлайн

#2 Июль 22, 2014 08:07:34

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Как разбить строку?

Да, именно так



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#3 Июль 22, 2014 09:20:20

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

Как разбить строку?

Seganapa
в общем мне нужно спарсить множество списков (ul li) и объединить их в один

Вообще, их можно собрать через lxml.html, потом добавить их в один узел, а потом для этого узла выполнить функцию. Функция берёт узел, объединяет его одинаковые дочерние узлы, а потом для для каждого из получившихся уникальный дочерних узлов выполняет себя снова.



Офлайн

#4 Июль 22, 2014 09:28:33

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Как разбить строку?

А примерчик случайно нигде не завалялся?
Наверное это самый правильный способ. Перепробовал уже и словари и строки в строках, но все не то…



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#5 Июль 22, 2014 12:40:44

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Как разбить строку?

Seganapa
Да, именно так

Если ты ещё не понял, это делает код с 1 страницы.



Офлайн

#6 Июль 22, 2014 14:23:06

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

Как разбить строку?

Seganapa
А примерчик случайно нигде не завалялся?

#!/usr/bin/env python3
 
import lxml.etree
 
 
def joinnodes(node):
 
    st = {i.tag for i in node}
 
    for tag in st:
        lst = node.findall(tag)
        if len(lst) > 1:
            elem = lst.pop(0)
            for e in lst:
                elem.extend(e)
                node.remove(e)
 
    for c in node:
        joinnodes(c)
 
    return node
 
 
text1 = """
 
<tag1>
  <tag11>
    <tag111>a</tag111>
  </tag11>
</tag1>
 
<tag2>
  <tag11>a</tag11>
</tag2>
 
"""
 
text2 = """
 
<tag1>
  <tag22>b</tag22>
  <tag11>
    <tag222>b</tag222>
  </tag11>
</tag1>
 
<tag1>
  <tag33>c</tag33>
  <tag11>
    <tag333>c</tag333>
  </tag11>
</tag1>
 
<tag2>
  <tag22>b</tag22>
</tag2>
 
"""
 
text = '<root>{}</root>'.format(text1 + text2)
 
root = lxml.etree.fromstring(text)
 
out = ''.join(
    lxml.etree.tostring(
        i, encoding='unicode').strip()
    for i in joinnodes(root)
)
 
print(out)

[guest@localhost py]$ ./lijoin.py 
<tag1>
<tag11>
<tag111>a</tag111>
<tag222>b</tag222>
<tag333>c</tag333>
</tag11>
<tag22>b</tag22>
<tag33>c</tag33>
</tag1><tag2>
<tag11>a</tag11>
<tag22>b</tag22>
</tag2>
[guest@localhost py]$



Отредактировано py.user.next (Июль 22, 2014 14:28:11)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version