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

Reply via email to