python目录结构显示逗号分隔的字符串基于开放和封闭的括号

问题描述:

我正在学习python。这也是我的第一个*问题,并在格式化输出以显示我的需求方面苦苦挣扎。 我正在写一个Python代码,用于将逗号分隔值的字符串转换为级别层次结构,如下所示显示数据。python目录结构显示逗号分隔的字符串基于开放和封闭的括号

s = "(id,cb,e(id,fn,eT(id), ln),lc)" 

我想这样

-id 
-cb 
-e 
    --id 
    --fn 
    --eT 
    ---id 
    --ln 
-lc 

一个输出到目前为止,我还做了一些编码,但我在努力完善它。

class parent-child(): 
    stack = [] 
    def tree_recur(self,employee, level): 
    s = s[s.index("(")+1:s.rindex(")")] 
    ind = 0 
    while(s.rstrip != null or s != ""): 
      ss = s.index(",") 
     words = s[ind:ss] 
     parenind = words.index("(") 
     if parenind == -1: 
      stack.append(level,words) 
      s = s[ss+1:len(s)] 
     else: 
      stack.append(s[ss+1:parenind-1]) 
      closeparenind = s.index(")") 
      ss1= s[parenind:closeparenind] 
      return tree_recur(self,ss1,level+1) 

    def main(): 
     s = "(id,created,employee(id,firstname,employeeType(id), lastname),location)" 
     level = 0 
     print(E = parent-child(s, level)) 

    main() 

有人可以帮我完善这段代码。我不知道如何在字符串之前打印“ - ”取决于关卡的深度。这是第1级的一个连字符,第2级的两个连字符,第3级的三个连字符,并在括号关闭时向上移动一级。我想感谢您的帮助和时间,帮助我。

+0

请把你所有的代码的代码块 – jtmingus

由于您已经尝试解析。更简单的方法是遍历每个字符。

s = "(id,cb,e(id,fn,eT(id), ln),lc)" 

hyphens = 0 
result = [] 
current = "" 

for c in s: 
    if c == "(": hyphens += 1 
    if c == ")": hyphens -= 1 

    if c.isalnum(): 
     if not current: 
      current += "-" * hyphens 
     current += c 
    elif current: 
     result.append(current) 
     current = "" 

result = " ".join(result) 

print(result) 

它打印:

-id -cb -e --id --fn --eT ---id --ln -lc 

编辑:

我能理解你想要的格式如下:

-id 
-cb 
-e 
    --id 
    --fn 
    --eT 
    ---id 
    --ln 
-lc 

这可以通过改变这样做:

current += " " * 2 * (hyphens - 1) + "-" * hyphens 

result = "\n".join(result) 
+1

谢谢您的帮助和简单的代码。谢谢你介绍isalnum()。 – Xavier

+0

我很好奇如何按级别按字母顺序排序。如何统计单词前的连字符数量并按字母顺序排序。我正试图围绕如何做到这一点,但无法提出任何事情。感谢您的帮助和时间。 – Xavier