Форум сайта python.su
0
str = "Запчасти кузова | -Детали кузова / крыло / буфер | --Продольная / поперечная балка | --Колесная ниша | --Накладки порога / двери | ---Боковина | --Крыло / навесные части | --Обшивка кузова | -Крышки багажника / капоты / двери / складная крыша | "
Запчасти кузова | -Детали кузова / крыло / буфер | –Продольная / поперечная балка |
Запчасти кузова | -Детали кузова / крыло / буфер | –Колесная ниша |
Запчасти кузова | -Детали кузова / крыло / буфер | –Накладки порога / двери | —Боковина |
Запчасти кузова | -Детали кузова / крыло / буфер | –Крыло / навесные части |
Запчасти кузова | -Детали кузова / крыло / буфер | –Обшивка кузова |
Запчасти кузова | -Крышки багажника / капоты / двери / складная крыша |
Отредактировано Seganapa (Июль 18, 2014 14:39:26)
Офлайн
568
Откуда такой формат данных берётся?
Офлайн
103
как-то так
# -*- coding: utf-8 -*- def f(s): a = s[:-1].split('|') for i in xrange(0, len(a)*2, 2): a.insert(i+1, 0) for j in a[i][1:]: if j == '-': a[i+1] += 1 else: break s_out = "" if len(a) < 4: return s for i in xrange(3, len(a), 2): if a[i] <= a[i-2]: index = a[i]-1 s_tmp = a[i-1] for j in xrange(i-2, 0, -2): if a[j] == index: s_tmp = a[j-1] + s_tmp index -= 1 s_out += s_tmp + "\n" return s_out s_in = r"Запчасти кузова | -Детали кузова / крыло / буфер | --Продольная / поперечная балка | --Колесная ниша | --Накладки порога / двери | ---Боковина | --Крыло / навесные части | --Обшивка кузова | -Крышки багажника / капоты / двери / складная крыша |" print f(s_in)
Запчасти кузова -Детали кузова / крыло / буфер --Колесная ниша Запчасти кузова -Детали кузова / крыло / буфер --Накладки порога / двери Запчасти кузова -Детали кузова / крыло / буфер --Крыло / навесные части Запчасти кузова -Детали кузова / крыло / буфер --Обшивка кузова Запчасти кузова -Крышки багажника / капоты / двери / складная крыша
Отредактировано terabayt (Июль 18, 2014 23:04:51)
Офлайн
33
s = s.strip(' |').split(' | ') def print_line(result): print(' | '.join(result[k] for k in sorted(result)) + ' |') result = {} for elem in s: number_dash = elem.count('-') if number_dash in result: print_line(result) result[number_dash] = elem if number_dash + 1 in result: del result[number_dash + 1] else: result[number_dash] = elem else: print_line(result)
Офлайн
103
Budulianin
s = r"Запчасти кузова - комплектующие | -Детали кузова / крыло / буфер | --Продольная / поперечная балка | --Колесная ниша | --Накладки порога / двери | ---Боковина | --Крыло / навесные части | --Обшивка кузова | -Крышки багажника / капоты / двери / складная крыша |"
Запчасти кузова - комплектующие | -Детали кузова / крыло / буфер | --Продольная / поперечная балка | -Детали кузова / крыло / буфер | --Колесная ниша | -Детали кузова / крыло / буфер | --Накладки порога / двери | ---Боковина | -Детали кузова / крыло / буфер | --Крыло / навесные части | -Детали кузова / крыло / буфер | --Обшивка кузова | -Крышки багажника / капоты / двери / складная крыша |
s = r"Запчасти кузова | -Детали кузова / крыло / буфер | --Продольно-поперечная балка | --Колесная ниша | --Накладки порога / двери | ---Боковина | --Крыло / навесные части | --Обшивка кузова | -Крышки багажника / капоты / двери / складная крыша |"
Запчасти кузова | -Детали кузова / крыло / буфер | --Колесная ниша | --Продольно-поперечная балка | Запчасти кузова | -Детали кузова / крыло / буфер | --Накладки порога / двери | ---Боковина | Запчасти кузова | -Детали кузова / крыло / буфер | --Крыло / навесные части | Запчасти кузова | -Детали кузова / крыло / буфер | --Обшивка кузова | Запчасти кузова | -Крышки багажника / капоты / двери / складная крыша |
Офлайн
33
terabayt
Хе, ну принимай патч тогда.
def print_line(result): print(' | '.join(result[k] for k in sorted(result)) + ' |') result = {} for elem in s: match = re.match('(-+)[а-яА-Я0-9]+', elem) number_dash = match and len(match.group(1)) or 0 if number_dash in result: print_line(result) result[number_dash] = elem if number_dash + 1 in result: del result[number_dash + 1] else: result[number_dash] = elem else: print_line(result)
Офлайн
0
terabayt
Второй вариант
Ваш код работает, но почему-то теряются некоторые элементы
Например из такой строки
s_in = r"Запчасти кузова | -Детали кузова / крыло / буфер | --Продольная / поперечная балка | --Колесная ниша | --Накладки порога / двери | --Боковина | --Крыло / навесные части | --Обшивка кузова | -Крышки багажника / капоты / двери / складная крыша | --Двери / составляющие | -Дополнительная фара / комплектующие | --Противотуманная фара / комплектующие | ---Противотуманная фара лампа накаливания | --Фара дальнего света / комплектующие | ---Лампа накаливания фара дальнего света | -Система освещения / световые приборы | --Габаритный огонь / комплектующие | ---Лампа накаливания | --Фонарь стоп-сигнала / комплектующие | ---Лампа накаливания | --Фонарь указателя поворота / комплектующие | ---Лампа накаливания | --Фонарь освещения номерного знака / комплектующие | ---Лампа накаливания | --Задняя противотуманная фара / комплектующие | ---Лампа накаливания | --Фара заднего хода / комплектующие | ---Лампа накаливания | --Фонарь, установленный в двери | -Основная фара / комплектующие | --Лампа накаливания основной фары | -Запчасти передней части кузова | --Основная фара / комплектующие | ---Лампа накаливания основной фары | --Противотуманная фара / комплектующие | ---Противотуманная фара лампа накаливания | --Фара дальнего света / комплектующие | ---Лампа накаливания фара дальнего света | --Фонарь указателя поворота / комплектующие | ---Лампа накаливания | --Детали крепления | ---Упругие элементы | --Колесная ниша | -Кабина пассажира | --Накладки порога / двери | --Двери / составляющие | --Боковина | --Топливный бак | -Запчасти задней части кузова | --Габаритный огонь / комплектующие | ---Лампа накаливания | --Фонарь стоп-сигнала / комплектующие | ---Лампа накаливания | --Фонарь указателя поворота / комплектующие | ---Лампа накаливания | --Фонарь освещения номерного знака / комплектующие | ---Лампа накаливания | --Задняя противотуманная фара / комплектующие | ---Лампа накаливания | --Фара заднего хода / комплектующие | ---Лампа накаливания | --Облицовка | --Колесная ниша | --Топливный бак | --Крыло / навесные части | --Боковина | --Задняя дверь / детали | -Топливный бак | -Упругие элементы"
Отредактировано Seganapa (Июль 21, 2014 14:06:10)
Офлайн
0
Проблема остается актуальной!
Может я изначально что-то не так делаю. (как раз к вопросу
Откуда такой формат данных берётся?)
Запчасти кузова
-Детали кузова перед / крыло / буфер
--Продольная / поперечная балка
--Колесная ниша
--Накладки порога / двери
-Крышки багажника / капоты / двери / складная крыша
--Двери / составляющие
---Ручка двери
Запчасти двигателя
-Газораспределительный механизм
--Ремень ГРМ / натяжение ремня
---Ремень ГРМ
---Комплект ремней ГРМ
--Цепь привода распредвала / натяжение
---Планка успокоителя
Запчасти кузова
-Детали кузова перед / крыло / буфер
--Колесная ниша
-Детали кузова зад / крыло / буфер
--Колесная ниша
-Крышки багажника / капоты / двери / складная крыша
--Двери / составляющие
---Стекло двери
--Крыша / составляющие
---Стекло двери
Запчасти кузова
-Детали кузова / крыло / буфер
--Продольная / поперечная балка
--Колесная ниша
--Накладки порога / двери
-Детали кузова зад / крыло / буфер
--Колесная ниша
-Крышки багажника / капоты / двери / складная крыша
--Двери / составляющие
---Ручка двери
---Стекло двери
--Крыша / составляющие
---Стекло двери
Запчасти двигателя
-Газораспределительный механизм
--Ремень ГРМ / натяжение ремня
---Ремень ГРМ
---Комплект ремней ГРМ
--Цепь привода распредвала / натяжение
---Планка успокоителя
Отредактировано Seganapa (Июль 21, 2014 15:42:24)
Офлайн
857
1) Оформи их в теги кода, чтобы дефисы не сливались.
2) Приведи входные списки и выходной список.
Офлайн
0
py.user.nextпоправил.
1) Оформи их в теги кода, чтобы дефисы не сливались.2) Приведи входные списки и выходной список.
Офлайн