Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: using split for a string : error

Reply
Thread Tools

Re: using split for a string : error

 
 
Oscar Benjamin
Guest
Posts: n/a
 
      01-25-2013
On 24 January 2013 11:35, Chris Angelico <(E-Mail Removed)> 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().

Personally, I consider the int() function too permissive because of
its behaviour in truncating non-integer numeric types. But then that's
because I'm always paranoid that the values of my precious numbers are
being changed without my knowledge. From my vantage point I really
can't see why the ambiguous behaviour of atoi() would actually be
desired by anyone (unless they were stuck using a language that made
string manipulation generally a bit awkward).


Oscar
 
Reply With Quote
 
 
 
 
Neil Cerutti
Guest
Posts: n/a
 
      01-25-2013
On 2013-01-25, Oscar Benjamin <(E-Mail Removed)> wrote:
> On 24 January 2013 11:35, Chris Angelico <(E-Mail Removed)> 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().


Right. atoi is no good even in C. You get much better control
using the sprintf family. int would need to return a tuple of the
number it found plus the number of characters consumed to be more
useful for parsing.

>>> intparse("123abc")

(123, 3)

But that would make it might inconvenient for general use.

--
Neil Cerutti
 
Reply With Quote
 
 
 
 
Hans Mulder
Guest
Posts: n/a
 
      01-25-2013
On 25/01/13 15:04:02, Neil Cerutti wrote:
> On 2013-01-25, Oscar Benjamin <(E-Mail Removed)> wrote:
>> On 24 January 2013 11:35, Chris Angelico <(E-Mail Removed)> 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().

>
> Right. atoi is no good even in C. You get much better control
> using the sprintf family.


I think you meant sscanf.

It's true that sscanf gives you more control. That being said,
sometimes the one option atoi gives you, just happens to be what
you need.

> int would need to return a tuple of the
> number it found plus the number of characters consumed to be more
> useful for parsing.
>
>>>> intparse("123abc")

> (123, 3)
>
> But that would make it might inconvenient for general use.


If the new function is nameed intparse, and the existing int
function remains available, then most use cases would be served
by int, and intparse would be available as a building block for
other use cases. For example atoi could be defined as:

def atoi(s): return intparse(s)[0]

intparse("xyz") should return (0, 0), and leave it to the caller
to decide whether a ValueError shoud be raised.


-- HansM




 
Reply With Quote
 
Joel Goldstick
Guest
Posts: n/a
 
      01-25-2013
Don't forget to look at csv reader.

http://docs.python.org/2/library/csv.html


On Fri, Jan 25, 2013 at 9:31 AM, Hans Mulder <(E-Mail Removed)> wrote:

> On 25/01/13 15:04:02, Neil Cerutti wrote:
> > On 2013-01-25, Oscar Benjamin <(E-Mail Removed)> wrote:
> >> On 24 January 2013 11:35, Chris Angelico <(E-Mail Removed)> 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().

> >
> > Right. atoi is no good even in C. You get much better control
> > using the sprintf family.

>
> I think you meant sscanf.
>
> It's true that sscanf gives you more control. That being said,
> sometimes the one option atoi gives you, just happens to be what
> you need.
>
> > int would need to return a tuple of the
> > number it found plus the number of characters consumed to be more
> > useful for parsing.
> >
> >>>> intparse("123abc")

> > (123, 3)
> >
> > But that would make it might inconvenient for general use.

>
> If the new function is nameed intparse, and the existing int
> function remains available, then most use cases would be served
> by int, and intparse would be available as a building block for
> other use cases. For example atoi could be defined as:
>
> def atoi(s): return intparse(s)[0]
>
> intparse("xyz") should return (0, 0), and leave it to the caller
> to decide whether a ValueError shoud be raised.
>
>
> -- HansM
>
>
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>




--
Joel Goldstick
http://joelgoldstick.com

 
Reply With Quote
 
Neil Cerutti
Guest
Posts: n/a
 
      01-25-2013
On 2013-01-25, Hans Mulder <(E-Mail Removed)> wrote:
>> Right. atoi is no good even in C. You get much better control
>> using the sprintf family.

>
> I think you meant sscanf.


Yes, thanks for knocking that huge chunk of rust off of me.

--
Neil Cerutti
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: using split for a string : error Chris Angelico Python 0 01-24-2013 10:58 AM
Re: using split for a string : error Tobias M. Python 0 01-24-2013 10:55 AM
How to use String.split to split a mixed encoding string(partencoded in gbk, part encoded in utf-8) Stanley Xu Ruby 2 03-23-2011 02:06 PM
String#split(/\s+/) vs. String#split(/(\s+)/) Sam Kong Ruby 5 08-12-2006 07:59 PM
Small inconsistency between string.split and "".split Carlos Ribeiro Python 11 09-17-2004 05:57 PM



Advertisments