if you just wanted to slice off bits from the end, you change the increment 
in the [ ], so to remove the last two [:-2]

more generally on slice notation (basically its [start_position : 
end_position : step] but the examples below will explain it out in 
longhand.. ):
http://bergbom.blogspot.com.au/2011/04/python-slice-notation.html 
http://stackoverflow.com/questions/509211/good-primer-for-python-slice-notation


On Tuesday, October 30, 2012 8:23:21 PM UTC+8, Daz wrote:
>
> Heya
>
> Wow now that was really easy...
>
> So this is sorted and I can move on :D 
>
> Last tiny question tho... how can I remove multiple parts of the name? 
> Just for the future...
>
> list = cmds.ls('*_set*')
> for objects in list:
>   new_fn = "_".join(objects.split("_")[:-1-2]) 
> print new_fn
>
> ?? somehow it dont work :s neither if I put -1,-2 or in separate []....
>
> Thanks again !
>
>
>
> On Tuesday, 30 October 2012 12:19:06 UTC, matthew evans wrote:
>>
>> 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