2012-12-12 30 views
-5
Write1 [1.0] 
Write1 [12.0] 
Write1 ['C:/Users/san/Modeler/'] 
Write1 ['png'] 
Write1 ['rgb'] 
Write1 [True] 
Write2 [1.0] 
Write2 [1.0] 
Write2 [''] 
Write2 [' '] 
Write2 ['rgb'] 
Write2 [False] 

我要讓dictioary這樣 { 'WRITE1':[1.0,12.0, 'C:/路徑', 'PNG', 'RGB', True],'Write2':[1.0,1.0,'','','rgb',False]} 列表中的值來自nuke.toNode(wNode)[eachAttrib] .value() 這就是我試圖做怎麼做我就與值的兩個字典鍵爲列表

attributes=[] 
wnodeData={} 
for wNode in writeNodes: 
    for eachAttrib in ['first','last','file','file_type','channels','use_limit']: 
     wnodeData[wNode]=attributes 
     attributes.append(nuke.toNode(wNode)[eachAttrib].value()) 
+0

你問的是如何讀取上面的代碼塊作爲一個字符串或文本文件,並輸出相應的字典? – abarnert

回答

0
write1 = {'write1':[1,2,3,4] } 

應該工作...

0

使用默認值作爲列表的defaultdict,然後開始附加(或使用其他列表方法)。

1
import collections 

s = '''Write1 [1.0] 
Write1 [12.0] 
Write1 ['C:/Users/san/Modeler/'] 
Write1 ['png'] 
Write1 ['rgb'] 
Write1 [True] 
Write2 [1.0] 
Write2 [1.0] 
Write2 [''] 
Write2 [' '] 
Write2 ['rgb'] 
Write2 [False]''' 

d = collections.defaultdict(list) 
for line in s.split('\n'): 
    print(line) 
    key, val = line.split(' ', 1) 
    d[key].append(val[1:-1]) 
print(d) 

很顯然,如果你有一個文本文件,而不是一個字符串,你會更換爲帶環,說:

with open('mystuff.txt', 'r') as f: 
    for line in f: 

如果你想實際評估裏面的值括號(所以你得到的浮點數爲1.0而不是字符串'1.0',字符串'png'而不是字符串"'png'"等),你需要知道他們寫入的語言並解析它。它看起來像是Python的一個子集,其中每個東西都是單引號字符串文字,沒有轉義字符,非指數格式的浮點字符或布爾文字,但我不會假設沒有知道價值從哪裏來(我當然不會在他們的電話號碼上打電話eval而不知道他們來自哪裏,因爲然後有人可以在文本文件中粘貼os.system('rm -rf /'),並且您可以評估這個值。

2

類似於:

text="""Write1 [1.0] 
Write1 [12.0] 
Write1 ['C:/Users/san/Modeler/'] 
Write1 ['png'] 
Write1 ['rgb'] 
Write1 [True] 
Write2 [1.0] 
Write2 [1.0] 
Write2 [''] 
Write2 [' '] 
Write2 ['rgb'] 
Write2 [False]""" 

from ast import literal_eval 

d = {} 
lines = text.splitlines() 
for line in lines: 
    k, v = line.split(' ', 1) 
    val = literal_eval(v)[0] 
    d.setdefault(k, []).append(val) 

print d 

# {'Write1': [1.0, 12.0, 'C:/Users/san/Modeler/', 'png', 'rgb', True], 'Write2': [1.0, 1.0, '', ' ', 'rgb', False]} 
相關問題