加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

将嵌套的缩进文本解析为列表

发布时间:2020-12-20 12:24:14 所属栏目:Python 来源:网络整理
导读:将嵌套的缩进文本解析为列表 嗨, 也许有人可以给我一个开始的帮助. 我有嵌套缩进的txt类似于此.我应该将其解析为嵌套列表结构 TXT = r"""Test1 NeedHelp GotStuck Sometime NoLuck NeedHelp2 StillStuck GoodLuck"""Nested_Lists = ['Test1',['NeedHelp',['G
将嵌套的缩进文本解析为列表

嗨,

也许有人可以给我一个开始的帮助.

我有嵌套缩进的txt类似于此.我应该将其解析为嵌套列表结构

TXT = r"""
Test1
    NeedHelp
        GotStuck
            Sometime
            NoLuck
    NeedHelp2
        StillStuck
        GoodLuck
"""

Nested_Lists = ['Test1',['NeedHelp',['GotStuck',['Sometime','NoLuck']]],['NeedHelp2',['StillStuck','GoodLuck']]
]

Nested_Lists = ['Test1','GoodLuck']]]

任何有关python3的帮助都会受到关注

解决方法

您可以利用Python tokenizer来解析缩进的文本:

from tokenize import NAME,INDENT,DEDENT,tokenize

def parse(file):
    stack = [[]]
    lastindent = len(stack)

    def push_new_list():
        stack[-1].append([])
        stack.append(stack[-1][-1])
        return len(stack)

    for t in tokenize(file.readline):
        if t.type == NAME:
            if lastindent != len(stack):
                stack.pop()
                lastindent = push_new_list()
            stack[-1].append(t.string) # add to current list
        elif t.type == INDENT:
            lastindent = push_new_list()
        elif t.type == DEDENT:
            stack.pop()
    return stack[-1]

例:

from io import BytesIO
from pprint import pprint
pprint(parse(BytesIO(TXT.encode('utf-8'))),width=20)

产量

['Test1','GoodLuck']]]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读