2017-04-20 26 views
1

我正在學習python。這也是我的第一個stackoverflow問題,並在格式化輸出以顯示我的需求方面苦苦掙扎。 我正在寫一個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

回答

1

由於您已經嘗試解析。更簡單的方法是遍歷每個字符。

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