2013-05-12 1 views
0

я должен захватить все объекты с _cnt в моей майа сцене и разделить их, чтобы получить от этого:как разделить и переименовывать объекты внутри списка в Python

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

Таким образом, вы можете сделать все, что вы хотите с 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] 
+0

Я бы не рекомендовал «новый» как идентификатор, хотя это не ключевое слово Python. Программисты, имеющие опыт работы на других языках, могут обнаружить, что они довольно отвлекают, если они пытаются сохранить ваш код позже. Кроме того, вы не указали, как изменить исходный список или создать новый список этих измененных результатов. –

+0

Или: '' {0} _ {1} _001_ {2} ". Format (* new)' –

+0

@JimDennis: «новый» происходит из кода OP. И OP не пытается изменить исходный список или построить новый, он пытается использовать каждую модифицированную запись в функции. – abarnert

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 

 Смежные вопросы

  • Нет связанных вопросов^_^