2017-04-20 3 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のハイフン2つ、ハイフン3のレベル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

関連する問題