Heya
Aaa right ! Thats explains a lot !
So I can reformat them and put back together any way I want. Now that sort
of works but I hit a wall if some of the names has xx_xx_xx_xx and some are
xx_xx_xx. Then I get error....
Here is basic script
list = cmds.ls('*_set*')
for objects in list:
t = objects.split('_')
new_fn = "{0}_{1}_{2}_{3}".format(t[-0],t[-2],t[-3],t[-4])
print new_fn
and here is error
# Error: list index out of range
# Traceback (most recent call last):
# File "<maya console>", line 5, in <module>
# IndexError: list index out of range #
I guess its because names have different length...
I try using Try/except:pass but then it just loop again and add 1st part to
the end so that wont work whh...
Any hints how to just subtract/delete the last part of name?
On Tuesday, 30 October 2012 11:49:01 UTC, Anthony Tan wrote:
>
> With your format() call, you need a string format specifier to tell it how
> to use the arguments you've supplied it..for example, in the working script
> one, the format specifier is the string "{0}_JY_{1}"
>
> If you did a straight print on this, you'd get literally "{0}_JY_{1}",
> but since you're invoking format() against it, it'll go through and replace
> the {0} with the first argument in format() and {1} with the 2nd argument,
> and so on and so on. The { } are markers for where format() should be
> inserting values. Your loop currently is calling format(t[0], t[1]) against
> a string that doesn't contain any of the { }'s so it's not doing anything,
> and the result is that new_fn is the same as objects
>
> Is this more what you're after?
>
> list = cmds.ls('*_set*')
>
> for objects in list:
>
> # t = cmds.ls(objects)[0].split('_')[-1]
>
> # no need to call cmds.ls again to select anything, you've
>
> # already got the name with the first cmds.ls('*_set*') call
>
> t = objects.split('_')[-1]
>
>
> # new_fn = objects.format( t[0], t[1] )
> # apply a new prefix to the setXYZ suffix
>
> new_fn = "aNewPrefix_{0}".format(t)
>
>
>
> On Tuesday, October 30, 2012 7:09:07 PM UTC+8, Daz wrote:
>>
>> Heya
>>
>> I'm battling with a part of my script... I want to cmds.ls certain items
>> and then remove part of their name. After that I want the resulting name to
>> be used for next part of the script. The wall I hit is with .format
>> string... I got an working example but somehow it makes no sense to me
>> whh... anyway have a look, if any1 could push me to the right direction
>> that would be great ! I should be able to pick it up after hehe :)
>>
>>
>> Here is example of working script:
>>
>> fn = "LN0001_07272010_3.dat".split('_')
>> new_fn = '{0}_JY_{1}'.format(fn[0], fn[1])
>> print new_fn
>>
>> but he uses premade name...
>>
>> and here is my try
>>
>> list = cmds.ls('*_set*')
>> for objects in list:
>> t = cmds.ls(objects)[0].split('_')[-1]
>> new_fn = objects.format( t[0], t[1] )
>> print new_fn
>>
>> I just want to be able to remove _set and use the new name to select
>> nodes and run next script...
>>
>> Thanks in advance! :)
>>
>
--
view archives: http://groups.google.com/group/python_inside_maya
change your subscription settings:
http://groups.google.com/group/python_inside_maya/subscribe