在maya python中更改对象名称的一部分

在maya python中更改对象名称的一部分,python,rename,maya,Python,Rename,Maya,我觉得这应该很容易,但我所有的搜索都是徒劳的 我在maya中,有一系列对象的名称以_LOC结尾,我想运行一个python脚本,将它们重命名为以_JNT结尾。我设法让它在单个对象上工作,但我的for循环只执行第一个对象,然后停止。以下是我目前掌握的情况: import maya.cmds as mc sel=mc.ls(selection=True) for each in sel: item=sel[0] newname=item.split('_') mc.rena

我觉得这应该很容易,但我所有的搜索都是徒劳的

我在maya中,有一系列对象的名称以_LOC结尾,我想运行一个python脚本,将它们重命名为以_JNT结尾。我设法让它在单个对象上工作,但我的for循环只执行第一个对象,然后停止。以下是我目前掌握的情况:

import maya.cmds as mc

sel=mc.ls(selection=True)

for each in sel:
    item=sel[0]
    newname=item.split('_')
    mc.rename(newname[0]+'_JNT')

你实际上没有使用你的循环。您只需在当前引用选择的位置使用循环变量
each

import maya.cmds as mc

sel=mc.ls(selection=True)

for each in sel:
    newname=each.split('_')
    mc.rename(newname[0]+'_JNT')

你实际上没有使用你的循环。您只需在当前引用选择的位置使用循环变量
each

import maya.cmds as mc

sel=mc.ls(selection=True)

for each in sel:
    newname=each.split('_')
    mc.rename(newname[0]+'_JNT')

由于maya.cmds与mel处理字符串的方式相同,因此如果重命名子节点的父节点,脚本可能会失败,因为子节点的全名在maya中更改,但在选择列表中不会更改。这在很大程度上取决于您的设置

我建议改用pymel,因为它依赖于mobject而不是字符串:

import pymel.core as pm

sel=pm.ls(selection=True)

for each in sel:
    newname=each.nodeName().replace("_LOC", "_JNT")
    each.rename(newname)

由于maya.cmds与mel处理字符串的方式相同,因此如果重命名子节点的父节点,脚本可能会失败,因为子节点的全名在maya中更改,但在选择列表中不会更改。这在很大程度上取决于您的设置

我建议改用pymel,因为它依赖于mobject而不是字符串:

import pymel.core as pm

sel=pm.ls(selection=True)

for each in sel:
    newname=each.nodeName().replace("_LOC", "_JNT")
    each.rename(newname)

其他人已经正确地解决了代码中的错误


Maya还有一个内置的工具来执行此操作,在修改->搜索和替换名称下。它与代码所做的完全相同。它还能够替换场景中的所有名称,或仅替换您的选择。

其他人已正确地解决了代码中的错误


Maya还有一个内置的工具来执行此操作,在修改->搜索和替换名称下。它与代码所做的完全相同。它还可以替换场景中的所有名称,或者仅替换您的选择。

for
-循环中,您定义了
每个
但不使用它,请尝试将
item=sel[0]
更改为
item=each[0]
davewards是正确的,我认为这样做会更容易。替换(“'u LOC','u JNT'))在
for
-循环中定义
每个
但不使用它,尝试将
item=sel[0]
更改为
item=each[0]
davewards是正确的,我认为这样做会更容易。替换('u LOC','u JNT'))使用
cmds
处理指针而不是字符串时,也可以使用
OpenMaya.MDagPath
。使用
cmds
处理指针而不是字符串时,也可以使用
OpenMaya.MDagPath