Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中拆分和重命名列表中的对象_Python_Loops_For Loop_Maya - Fatal编程技术网

如何在python中拆分和重命名列表中的对象

如何在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

我必须在我的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])

如何修复此问题?

如果您知道如何对第一个对象执行某些操作,则可以使用
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