98

How would I parse the string 1,000,000 (one million) into it's integer value in Python?

1

3 Answers 3

168
>>> a = '1,000,000'
>>> int(a.replace(',', ''))
1000000
>>> 
Sign up to request clarification or add additional context in comments.

Comments

66

There's also a simple way to do this that should handle internationalization issues as well:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atoi("1,000,000")
1000000
>>> 

I found that I have to explicitly set the locale first as above, otherwise it doesn't work for me and I end up with an ugly traceback instead:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/locale.py", line 296, in atoi
    return atof(str, int)
  File "/usr/lib/python2.6/locale.py", line 292, in atof
    return func(string)
ValueError: invalid literal for int() with base 10: '1,000,000'

5 Comments

Do you mean: locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') I.e. "UTF-8", not "UTF8". On my OSX machine that seems to be the correct value.
This should be the accepted answer. The comma-replacement hack is brittle and i18n-breaking.
This still converts wrong values like 1,0,0,10 to 10010
@Seperman Under the hood, locale.atoi and friends just do val.replace(sep, ''), where sep is the thousands separator defined in the locale convention.
Exactly. I don't think that is the right approach.
14

Replace the ',' with '' and then cast the whole thing to an integer.

>>> int('1,000,000'.replace(',',''))
1000000

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.