Python 如何在嵌套结构中存储层次结构信息

Python 如何在嵌套结构中存储层次结构信息,python,json,dictionary,text-files,file-conversion,Python,Json,Dictionary,Text Files,File Conversion,希望你们都做得很好 下面是从文档中提取到.TXT文件的内容。 我希望阅读包含以下内容的文本文件: 1 Main Heading 1 1.1 Sub-heading 1 1.2 Sub-heading 2 2 Main Heading 2 2.1 Sub-heading 1 2.1.1 Sub-Sub-heading 1 2.1.2 Sub-Sub-heading 2 阅读后,我希望将其动态存储到Python字典中,即嵌套列表,如下所示: {"file name": { &q

希望你们都做得很好

下面是从文档中提取到.TXT文件的内容。 我希望阅读包含以下内容的文本文件:

1 Main Heading 1
1.1 Sub-heading 1
1.2 Sub-heading 2
2 Main Heading 2
2.1 Sub-heading 1
2.1.1 Sub-Sub-heading 1
2.1.2 Sub-Sub-heading 2
阅读后,我希望将其动态存储到Python字典中,即嵌套列表,如下所示:

{"file name": { "Main Heading 1": { "Sub-heading 1" : [], "Sub-heading 2" : [] }},
              { "Main Heading 2": { "Sub-heading 1": [ "Sub-Sub-heading 1", "Sub-Sub-heading 2" ] } } }
以上不是一个固定的结构,可以与不同的文件动态,我将进一步自动化的过程中循环。 我是嵌套字典的新手,并且一直处于“.txt文件->JSON”转换阶段。这方面的任何帮助都会非常有用。谢谢

import json

toc = """1 Main Heading 1
1.1 Sub-heading 1
1.2 Sub-heading 2
2 Main Heading 2
2.1 Sub-heading 1
2.1.1 Sub-Sub-heading 1
2.1.2 Sub-Sub-heading 2"""

myfile = 'myfile'

data = {myfile:{}}
for line in toc.splitlines():
    levels, title = line.split(' ', maxsplit=1)
    levels = levels.rstrip('.').split('.')
    if len(levels) == 1:
        heading = title
        data[myfile][heading] = {}
    elif len(levels) == 2:
        sub_heading = title
        data[myfile][heading][sub_heading] = []
    if len(levels) == 3:
        data[myfile][heading][sub_heading].append(title)

print(json.dumps(data, indent=4))
输出

{
    "myfile": {
        "Main Heading 1": {
            "Sub-heading 1": [],
            "Sub-heading 2": []
        },
        "Main Heading 2": {
            "Sub-heading 1": [
                "Sub-Sub-heading 1",
                "Sub-Sub-heading 2"
            ]
        }
    }
}

它会一直达到3级吗?此外,您的结构不一致-为什么没有子标题时,子标题在列表中,而不是在子标题的空列表中?1。最多3级,是的。2.你建议的结构对我也适用。。编辑了问题中的相同内容。请让我知道你的建议。干净而精彩的代码,伙计。工作得很有魅力!这对所有人都有效,但标题编号以句号结尾时除外,即“1.XYZ”、“2.1.ABC”,我尝试使用replace()删除该句号,但在不影响其他句号的情况下无效。有什么建议吗?还有,有没有一种方法可以处理像1到1.1.1,而不是1到1.1,然后是1.1.1这样的跳转情况?如果存在拖尾点,您总是可以.rstrip('.')`删除拖尾点。我编辑了我的回答:总是有办法处理不同的情况,但是你所描述的1->1.1.1没有意义。这表明银行结构不正确,rstrip有效。关于1->1.1.1,我知道这是不合逻辑的,但不幸的是文本输出来自OCR的PDF文档。将需要通过编辑1.1.1到1.1来处理它-但不确定在同一个txt中比较两行如何工作,因为我们正在逐行解析文件。