2013-05-12 90 views
0

重命名列表中的對象我必須抓住所有_cnt對象在我的Maya場景和分裂他們從此獲得 :如何拆分和蟒蛇

#Left_Hand_Cnt 

這樣:

#Left_Hand_001_cnt 

我寫了這個小腳本,但只適用於第一個對象。

cnt = cmds.select ('*_cnt*') 
cnts = cmds.ls (sl=True)   
new = cnts[0].split("_") 
cmds.rename (new[0] + "_" + new[1] + "_" + "001" + "_" + new[2]) 

我該如何解決呢?

回答

1

如果你知道如何做一些事來的第一個對象,你可以做每個對象同樣的事情用for循環:

for cnt in cnts: 
    new = cnt.split("_") 
    modified = new[0] + "_" + new[1] + "_" + "001" + "_" + new[2] 

所以,你可以做任何你想要的在該for循環內有modified。例如:

for cnt in cnts: 
    new = cnt.split("_") 
    modified = new[0] + "_" + new[1] + "_" + "001" + "_" + new[2] 
    os.rename(cnt, modified) 

但是,如果你想建立一個新的列表,以保持周圍,你可能會更好過使用列表理解(或map功能):

def modify_cnt(cnt): 
    new = cnt.split("_") 
    return new[0] + "_" + new[1] + "_" + "001" + "_" + new[2] 

modified_cnts = [modify_cnt(cnt) for cnt in cnts] 
+0

我不會推薦「新」作爲標識符,即使它不是Python關鍵字。具有其他語言經驗的程序員可能會發現,如果他們試圖在以後維護您的代碼,這會非常分散注意力。 此外,您還沒有顯示如何修改原始列表或建立這些修改後的結果的新列表。 – 2013-05-12 21:07:35

+0

Or:'「{0} _ {1} _001_ {2}」。格式(* new)' – 2013-05-12 21:08:14

+0

@JimDennis:'new'來自OP的代碼。而OP沒有試圖修改原來的列表,或者建立一個新的列表,他試圖在函數中使用每個修改的條目。 – abarnert 2013-05-12 21:23:18

1

更強大的解決方案:

lines = """ 
#Left_Hand_Cnt 
#bla_bla_bla_not 
#bla_bla_bla_Cnt 
""" 

for line in lines.splitlines(): 
    flds = line.split("_") 
    if flds[-1].lower()=="cnt": 
     print "%s_%03d_%s" % ("_".join(flds[:-1]), 1, flds[-1]) 

輸出:

#Left_Hand_001_Cnt 
#bla_bla_bla_001_Cnt