Форум сайта python.su
Есть список, например:
Dirs = ['dir1',['subdir1','subdir2'],'dir2','dir3',['subdir3',['subsubdir1',...]]]
<ul>
<li>dir1</li>
<li>
<ul>
<li>subdir1</li>
<li>subdir2</li>
</ul>
</li>
<li>dir2</li>........
</ul>
Отредактировано (Янв. 27, 2011 12:38:59)
Офлайн
dirs = ['dir1', ['subdir1','subdir2'], 'dir2', 'dir3', ['subdir3', ['subsubdir1', 'subsubdir3', 'subsubdir3']]]
def walk(tree):
print "<ul>"
for i in tree:
print "<li>"
if type(i) is str:
print i
else:
walk(i)
print "</li>"
print "</ul>"
walk(dirs)
Отредактировано (Янв. 27, 2011 12:51:40)
Офлайн
Правильно. Просто так я и сам умею. Думал можно красивее.
Офлайн
Moroznui, вам шашечки или ехать? Можно и без рекурсии, например.
А вот какие-то «паттерны» это вряд-ли сюда.
Офлайн
maxwellА зачем?
Можно и без рекурсии, например.
Офлайн
IsemЯ бы сказал коряга какая-то! Типы разные, если подряд идёт …,,, - это фэйл? Вобщем какое посадишь такое и вырастит.
По сути стандартное дерево.
Офлайн
При чем тут Isem?
Офлайн
Про генерацию текстов из деревьев можно прочитать в Antlr
вот простенький генератор текстов
class EvalDict:
"""usage: "___%(ech(a,'asd'))s _____" % evaldict.EvalDict() - interpolate strings"""
def __init__(self, globals=None, locals=None):
if globals is None:
globals = sys._getframe(1).f_globals
self.globals = globals
if locals is None:
locals = sys._getframe(1).f_locals
self.locals = locals
def __getitem__(self, key):
key = key % self
return eval(key, self.globals, self.locals)
def seprp(arg,sep=","):
"make string from arg separated by sep and pepend sep"
return reduce(lambda x, y: str(x)+sep+str(y), arg,"")
def sepr(arg,sep=","):
"make string from arg separated by sep"
if len(arg)==0:
return ""
else:
return reduce(lambda x, y: str(x)+sep+str(y), arg)
def seprnl(arg):
return sepr(arg,"\n")
def ToText(ex):
if type(ex) is type(""):
return "<li>"+ ex+"</li>"
else:
return """
<ul>
%(seprnl(map(ToText,ex)))s
</ul>
""" %EvalDict()
data=['dir1',['subdir1','subdir2'],'dir2','dir3',['subdir3',['subsubdir1','asd']]]
print ToText(data)
Отредактировано (Янв. 27, 2011 21:26:49)
Офлайн