Thanks a lot, I got it working now.
Thanks also to the other guys, your numerous hints were really valuable!

Kind regards,
Andy

John Machin schrieb:
On Sep 7, 7:04 am, Andreas Hofmann <[EMAIL PROTECTED]>
wrote:
Hello Folks!

I've got a little problem here, which which really creeps me out at the
moment.
I've got some strings, which only contain numbers plus eventually one
character as si-postfix (k for kilo, m for mega, g for giga). I'm trying
to convert those strings to integers, with this function:

def eliminate_postfix(value):
         if type(value) is str:

Don't use "is" unless you are really sure that "==" won't do the job.
Better idiom:
if isinstance(value, str):

                 value.upper()

This causes your "mult is always 1" problem. You need:
    value = value.upper()
Why? Because strings are immutable. String methods like upper return a
new string, they don't change the existing string.

                 if value.endswith('K'):
                         mult = 1000
                 elif value.endswith('M'):
                         mult = 1000000
                 elif value.endswith('G'):
                         mult = 1000000000
                 else:
                         mult = 1

                 if mult is 1:

Lose "is". In fact, lose the whole "if" statement. See below.

                         value = string.atoi(value)

Don't use deprecated functions from the string module. Use the built-
in float function to convert from text.

                 else:
                         value = string.atoi(value[:-1]) * mult
         return value

Those last few statements look somewhat tortuous. Try this:
    else: # mult would be 1, but we don't need it
        return float(value)
    return float(value[:-1]) * mult

HTH,
John
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to