using split for a string : error

Chris Angelico rosuav at gmail.com
Thu Jan 24 20:11:41 EST 2013


On Fri, Jan 25, 2013 at 12:03 PM, Oscar Benjamin
<oscar.j.benjamin at gmail.com> wrote:
> On 24 January 2013 11:35, Chris Angelico <rosuav at gmail.com> wrote:
>>
>> It's usually fine to have int() complain about any non-numerics in the
>> string, but I must confess, I do sometimes yearn for atoi() semantics:
>> atoi("123asd") == 123, and atoi("qqq") == 0. I've not seen a
>> convenient Python function for doing that. Usually it involves
>> manually getting the digits off the front. All I want is to suppress
>> the error on finding a non-digit. Oh well.
>>
>
> I'm interested to know what the situations are where you want the
> behaviour of atoi().

It simplifies operations on strings that contain numbers. For
instance, here's a problem from yesterday. I have a set of files (MIDI
files of The Rose of Persia) which have been sloppily numbered:

Rose_1.mid
Rose_10.mid
Rose_11.mid
Rose_12.mid
Rose_13.mid
Rose_14.mid
Rose_15.mid
Rose_16.mid
Rose_17.mid
Rose_18.mid
Rose_19.mid
Rose_2.mid
Rose_20.mid
Rose_21.mid
Rose_22.mid
Rose_23.mid
Rose_24.mid
Rose_3.mid
Rose_4.mid
Rose_5.mid
Rose_6.mid
Rose_7.mid
Rose_8.mid
Rose_9.mid
Rose_Int.mid

They're not in order. The one marked "Int" is the Introduction and
should be first; then Rose_1 ... Rose_9, then Rose_10 ... Rose_24. In
fact, the correct sort order is exactly:

atoi(filename[5:])

Most of the time, it makes no difference. Python's int() will do
exactly what atoi() does. It's only in the unusual case where they
even differ.

ChrisA



More information about the Python-list mailing list