将平坦编写的嵌套文本模板解析为N级可用的嵌套数据结构

时间:2013-06-14 18:25:00

标签: python html templates data-structures text-parsing

我最近获得了一个用于生成HTML的文件,一个各种菜单模板,由于时间的限制,python原型正在运行,但它是强力的,只适用于这种情况。

我知道必须有更好的方法来做到这一点,但我的谷歌搜索没有帮助。这是模板文件的样子

[text](link)
[text](link)
>[text](link)
>[text](link) 
>>[text](link)
>>[text](link)
>>[text](link)
[text](link)
>[text](link)

我设法将这种情况强行推进到这个结构中(希望不要错过一个)或[某个地方XD)

[
    [ [text](link), [] ],
    [ [text](link), [
        [ [text](link), [] ],
        [ [text](link), [
            [ [text](link), [] ],
            [ [text](link), [] ],
            [ [text](link), [] ], 
        ] ],
    ],
    [ [text](link), [
        [ [text](link), [] ],
    ] ],
]

但我基本上是通过跟踪root,parent然后检查“”,“>”或“>>”来完成此操作。在行的开头,然后将[text,[]]附加到“”的基数,“root”的“>”和root [parent]为“>>”。问题是我想解决 N *> ,我不知道如何继续,甚至不知道要搜索什么。 在Python中,答案可以是任何语言,Python只是最快的结合

menu = []
f = open('template_file', 'r')
root = 0
parent = 0
for line in f:
    line = line.strip()
    m = re.match('(.*)(\[.*)', line)
    if m:
        prefix = m.group(1)
        link = m.group(2)
        if prefix == "":
            menu.append([link, []])
            root += 1
            parent = 0
        elif prefix == ">":
            menu[root - 1][1].append([link, []])
            parent += 1
        elif prefix == ">>":
            menu[root - 1][1][parent - 1][1].append([link, []])

所以这很有效,但看起来很糟糕我不确定我应该寻找什么来找到一种更好的方法将这些模板文件解析成这些结构,这样我就可以吐出必要的HTML。我想进一步防范问题。

非常感谢。

1 个答案:

答案 0 :(得分:0)

替换每个“>”带有标签。输出与蛮力输出完全一样。 (file.txt是您上面的模板文件)

test = open("file.txt", "r")

for line in test:
    print line.replace(">", "\t")
    #print line