我试图使用python在blender3D中编写脚本。 我的场景中有一堆对象,想要使用对象名的数字部分来翻译它们。
首先,我通过匹配他们名字的一部分从场景中收集对象。
root_obj = [obj for obj in scene.objects if fnmatch.fnmatchcase(obj.name, "*_Root")]
这给了我一个列表:[bpy.data.objects [' 01_Root'],bpy.data.objects [' 02_Root'],bpy.data.objects [& #39; 03_Root&#39],bpy.data.objects [' 00_Root']]
我的目标是将这些对象移动15x名称的相应部分。所以' #Root'不必搬家,但是' 01_Root'必须移动15个搅拌机和' 02_Root' 30台搅拌机。
如何提取名称的数字部分并将其用作翻译值。
我是一个非常棒的python,所以我很感激能得到的所有帮助。
答案 0 :(得分:0)
字符串是一个字符列表,每个字符都可以通过索引从0开始访问,第一个字符使用name[0]
,第二个字符使用name[1]
。与任何列表一样,您可以使用slicing来获取列表的一部分。如果值始终是前两个字符,则可以使用name[:2]
获取值,您可以将其转换为int()
的整数或带float()
的浮点数。结合起来,
val = int(name[:2])
然后你有一个数字,你可以用。计算新的位置。
obj.location.x = val * 15
如果名称中的位数可能不同,您可以使用split()
来破坏特定分隔字符上的字符串。这将返回指定字符之间的项目列表,因此如果您希望第一个项目变为整数。
name = '02_item'
val = int(name.split('_')[0])
使用拆分还允许名称中包含多个值。
name = '2_12_item'
val1 = int(name.split('_')[0])
val2 = int(name.split('_')[1])