0

我必须在我的 Maya 场景中使用 _cnt 抓取所有对象并将它们拆分以从中获取:

#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])

我该如何解决?

4

2 回答 2

1

如果你知道如何对第一个对象做某事,你可以用循环对每个对象做同样的事情:for

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

modified因此,您可以在该for循环中做任何您想做的事情。例如:

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]
于 2013-05-12T21:02:46.890 回答
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
于 2013-05-12T21:14:00.887 回答