new string method in 2.5 (partition)

Bruno Desthuilliers bdesth.quelquechose at
Tue Sep 19 21:32:21 CEST 2006

John Salerno a écrit :
> Forgive my excitement, especially if you are already aware of this, but 
> this seems like the kind of feature that is easily overlooked (yet could 
> be very useful):
> Both 8-bit and Unicode strings have new partition(sep) and 
> rpartition(sep) methods that simplify a common use case.
> The find(S) method is often used to get an index which is then used to 
> slice the string and obtain the pieces that are before and after the 
> separator.

Err... is it me being dumb, or is it a perfect use case for str.split ?

> partition(sep) condenses this pattern into a single method 
> call that returns a 3-tuple containing the substring before the 
> separator, the separator itself, and the substring after the separator. 
> If the separator isn't found, the first element of the tuple is the 
> entire string and the other two elements are empty. rpartition(sep) also 
> returns a 3-tuple but starts searching from the end of the string; the 
> "r" stands for 'reverse'.
> Some examples:
>  >>> ('').partition('://')
> ('http', '://', '')
>  >>> ('file:/usr/share/doc/index.html').partition('://')
> ('file:/usr/share/doc/index.html', '', '')
>  >>> (u'Subject: a quick question').partition(':')
> (u'Subject', u':', u' a quick question')
>  >>> ''.rpartition('.')
> ('www.python', '.', 'org')
>  >>> ''.rpartition(':')
> ('', '', '')

I must definitively be dumb, but so far I fail to see how it's better 
than split and rsplit:

 >>> ''.split('://')
['http', '']
 >>> 'file:/usr/share/doc/index.html'.split('://')
 >>> u'Subject: a quick question'.split(': ')
[u'Subject', u'a quick question']
 >>> u'Subject: a quick question'.rsplit(': ')
[u'Subject', u'a quick question']
 >>> ''.rsplit('.', 1)
['www.python', 'org']

There are IMVHO  much exciting new features in 2.5 (enhanced generators, 
try/except/finally, ternary operator, with: statement etc...)

More information about the Python-list mailing list