gpt4 book ai didi

python - 嵌套命名空间删除

转载 作者:行者123 更新时间:2023-12-04 16:57:39 26 4
gpt4 key购买 nike

我正在编写脚本以在不使用/打开命名空间编辑器的情况下删除命名空间(嵌套或非嵌套),假设在其中没有内容的情况下满足条件。

这样做时,我遇到了无法使用 cmds.namespace(rm="<string of the namespace>") 删除嵌套命名空间的问题。

我找到了一个更长的解决方法,但我被卡住了,因为输出是列表中的 unicode,我似乎无法将它转换为字符串。

nsLs = cmds.namespaceInfo( lon=True)
# nsLs Result: [u'UI', u'camera01', u'shared', u'v02', u'v03']

defaultNs = ["UI", "shared", "camera01"]

diffLs = [item for item in nsLs if item not in defaultNs]
# diffLs Result: [u'v02', u'v03']

for ns in diffLs:
nsNest = cmds.namespaceInfo(ns, lon=True)
# nsNest Result: [u'v02:new_run01']
# [u'v03:new_run01']
cmds.namespace(rm=str(nsNest))

因此,我使用的“删除”标志不起作用,因为遇到以下错误:
# Error: No namespace matches name: '[u'v02:new_run01']'.
# Traceback (most recent call last):
# File "<maya console>", line 13, in <module>
# RuntimeError: No namespace matches name: '[u'v02:new_run01']'. #

我输入的上述代码仅适用于嵌套的命名空间,尽管它仍然不是“那里”来实现结果,也不是很灵活(假设场景中只有 1 个嵌套级别),有什么方法可以纠正这?

此外,如果有人有任何解决方案/方法来删除命名空间而不使用命名空间编辑器,当然......

nestedNs

最佳答案

namespace命令需要一个字符串(在本例中为 'v02:new_run01' ),您将字符串化列表本身(在本例中为 '[u'v02:new_run01']' )传递给它。既然你有 lon=True标志,该命令将始终返回一个列表。您应该确保从中提取元素并将其发送到 namespace命令。

您所要做的就是从列表中传递元素而不是整个列表:

for ns in diffLs:
nsNest = cmds.namespaceInfo(ns, lon=True)
# nsNest Result: [u'v02:new_run01']
# [u'v03:new_run01']
if nsNest:
cmds.namespace(rm=nsNest[0])

希望有帮助。

关于python - 嵌套命名空间删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com