if you simply want to "remove" the last part of the name try:

list = cmds.ls('*_set*')
for objects in list:
    new_fn = "_".join(object.split("_")[:-1])
    print new_fn

On Tue, Oct 30, 2012 at 12:07 PM, Daz <[email protected]> wrote:

> 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
>

-- 
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