如何在python中拆分和重命名列表中的对象
我必须在我的maya场景中使用_cnt抓取所有对象,并将它们拆分以获得 由此:如何在python中拆分和重命名列表中的对象,python,loops,for-loop,maya,Python,Loops,For Loop,Maya,我必须在我的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" + "_" + ne
#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])
如何修复此问题?如果您知道如何对第一个对象执行某些操作,则可以使用
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
函数):
更强健的解决方案:
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
我不建议将“new”作为标识符,即使它不是Python关键字。有其他语言经验的程序员可能会发现,如果他们以后试图维护您的代码,这会让他们分心。此外,您还没有演示如何修改原始列表或生成这些修改结果的新列表。@JimDennis:
new
来自OP的代码。而OP并不是试图修改原始列表,或构建新列表,而是试图在函数中使用每个修改的条目。@AshwiniChaudhary:我并不是想向OP展示一种更好的方式来完成他已经知道如何完成的部分,我是想向他展示如何在循环中完成它。我认为替换他现有的逻辑只会让他感到困惑,这不是他想要的。但这是一个有用的评论。
#Left_Hand_001_Cnt
#bla_bla_bla_001_Cnt