在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  HTML/ 如何將有層級縮進的文本, 使用python轉(zhuǎn)換為對應(yīng)關(guān)系的文本?

如何將有層級縮進的文本, 使用python轉(zhuǎn)換為對應(yīng)關(guān)系的文本?

加入有如下一段文本, 有格式化的空格縮進代表層級.

MANAGER
    SUPERVISOR 1
        WORKER 1
        WORKER 2
        WORKER 3
    SUPERVISOR 2
        WORKER 4
        WORKER 5
        WORKER 6
    SUPERVISOR 3
        WORKER 7
        WORKER 8
        WORKER 9

如何使用python轉(zhuǎn)換為如下的形式, 表示兩兩對應(yīng)的關(guān)系?

MANAGER, SUPERVISOR 1
SUPERVISOR 1, WORKER 1
SUPERVISOR 1, WORKER 2
SUPERVISOR 1, WORKER 3
MANAGER, SUPERVISOR 2
SUPERVISOR 2, WORKER 4
...
MANAGER, SUPERVISOR 3
...
回答
編輯回答
舊螢火

判斷縮進層次,使用遞歸來解即可

2018年1月31日 04:46
編輯回答
茍活
class Tree:
    def __init__(self, t, l):
        self.text = t.replace('\n', '') # 刪除換行符
        self.l = l
        self.node = []

root = Tree('', -1)

with open('12.txt', 'r') as r:
    dp = [root]
    for i in r.readlines():
        t = i.lstrip()
        l = len(i) - len(t)
        node = Tree(t, l)
        while True:
            if l > dp[0].l:
                dp[0].node.append(node)
                if dp[0] != root: 
                    print(dp[0].text, node.text) # 打印你要的結(jié)果
                break
            else:
                dp.pop(0)
        dp.insert(0, node)

# root 是根節(jié)點
"""結(jié)果:
MANAGER SUPERVISOR 1
SUPERVISOR 1 WORKER 1
SUPERVISOR 1 WORKER 2
SUPERVISOR 1 WORKER 3
MANAGER SUPERVISOR 2
SUPERVISOR 2 WORKER 4
SUPERVISOR 2 WORKER 5
SUPERVISOR 2 WORKER 6
MANAGER SUPERVISOR 3
SUPERVISOR 3 WORKER 7
SUPERVISOR 3 WORKER 8
SUPERVISOR 3 WORKER 9
"""
2017年7月28日 08:07
編輯回答
青黛色
my $x = "
MANAGER
    SUPERVISOR 1
        WORKER 1
        WORKER 2
        WORKER 3
    SUPERVISOR 2
        WORKER 4
        WORKER 5
        WORKER 6
    SUPERVISOR 3
        WORKER 7
        WORKER 8
        WORKER 9
";
my (@cache, $level); # I am not familiar with python, using perl6 for example

for $x.lines { 
    $level = ($_ ~~ /^" "*/).chars; # counting the whitespaces of the head of string
    @cache[$level] = .trim;  # remove the whitespaces and store it in @cache
    # print the last level text and current level text
    printf "%s, %s\n", @cache[$level - 4], @cache[$level] if $level > 0; 
}

try it online: https://tio.run/#perl6

2017年6月15日 22:53