1

ファイルから来ると、次のような文字列があります。

var1 : data1
var2 : data2
dict1 {  
     var3 : data3  
     dict2 {  
         var4 : data4  
     }
     var5 : data5
}
dict3 {
     var6 : data6
     var7 : data7
}

等々。(行末は \n、インデントはそれぞれ \t)
そして、私はそれをそのようなものに変換しようとします:

Dictionary={"var1":"data1","var2":"data2", "dict1" : 
    {"var3":"data3", "dict2" : {
        "var4":"data4" }, "var5":"data5"}
    , dict3:{"var6":"data6","var7":"data7"}

(インデントはあまりにも人間が読めるように保つだけです)
それを解決するには、それをリストに分割し、文字列に「}」が見つかるまでリストをたどって削除することしか考えられません(だから私は後でそれに出くわすことはありません)、「{」を含む文字列が見つかるまで歩き、前の空白と後の「 {」を削除します(temp=re.split ('(\S+) \{',out[z])この例では、最初の一時[1]は「dict2」になります) 、間にすべてを追加し、最後に次の「}」に進みます。

しかし、それは高速でもエレガントでもありません。私は間違いなく何かが欠けています。
コードは現在:

def procvar(strinG):
    x=y=z=temp1=temp2=0
    back = False
    out=re.split ('\n',strinG) #left over from some other tries
    while z < len(out):
        print "z=",z," out[z]= ", out[z]
        if "{" in out[z]:
            if back == True:
                back = False
                xtemp=re.split ('(\S+) \{',out[z])
                out[z]=xtemp[1]
                ytemp=xtemp[1]
                temp2=z+1
                print "Temp: ",temp1," - ",out[temp1]
                out[z]={out[z]:[]}
                while temp2 <= temp1:
                    out[z][xtemp[1]].append(out[temp2]) # not finished here, for the time being I insert the strings as they are
                    del out[temp2]
                    temp1-=1
                print out[z]
        if "}" in out[z]:
            back = True
            del out[z]
            temp1 = z-1
        if back == True:
            z-=1
        else:
            z+=1
    return out
4

3 に答える 3