Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一个简单编写的嵌套文本模板解析为N个级别的可用嵌套数据结构_Python_Html_Templates_Data Structures_Text Parsing - Fatal编程技术网

Python 将一个简单编写的嵌套文本模板解析为N个级别的可用嵌套数据结构

Python 将一个简单编写的嵌套文本模板解析为N个级别的可用嵌套数据结构,python,html,templates,data-structures,text-parsing,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) >[

我最近收到了一个用于生成HTML的文件,这是一个菜单模板,由于时间限制,我得到了一个python原型,但它是蛮力的,只适用于这种情况

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

[text](link)
[text](link)
>[text](link)
>[text](link) 
>>[text](link)
>>[text](link)
>>[text](link)
[text](link)
>[text](link)
我已经成功地将其强行插入到这个结构中(希望不会丢失a]或[某处XD)

但我基本上是通过跟踪root、parent,然后在行的开头检查“”“>”或“>>”,然后将[text,[]添加到基中,表示“”,root表示“>”,root[parent]表示“>>”。问题是我想为N*>解决,但我不知道如何继续,甚至不知道搜索什么。在Python中,答案可以是任何语言,Python是最快的组合

这是可行的,但看起来很糟糕,我不确定我应该搜索什么来找到更好的方法,将这些模板文件解析成这些结构,这样我就可以写出必要的HTML。我想防止问题进一步恶化

非常感谢。

将每个“>”替换为一个选项卡。输出几乎与暴力输出完全相同。(file.txt是如上所述的模板文件)


我最近一直在摆弄Haskell,这感觉像是Haskell很容易解决的问题,但我还没有完全解决。
[
    [ [text](link), [] ],
    [ [text](link), [
        [ [text](link), [] ],
        [ [text](link), [
            [ [text](link), [] ],
            [ [text](link), [] ],
            [ [text](link), [] ], 
        ] ],
    ],
    [ [text](link), [
        [ [text](link), [] ],
    ] ],
]
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, []])
test = open("file.txt", "r")

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