In Python, what is the simplest way to convert a number enclosed in parentheses (string) to a negative integer (or float)?
For example, '(4,301)' to -4301, as commonly encountered in accounting applications.
In Python, what is the simplest way to convert a number enclosed in parentheses (string) to a negative integer (or float)?
For example, '(4,301)' to -4301, as commonly encountered in accounting applications.
The simplest way is:
my_str = "(4,301)" num = -int(my_str.translate(None,"(),"))
Since you are reading from a system that put in thousands separators, it's worth mentioning that we are not using them the same way all around the world, which is why you should consider using a locale system. Consider:
import locale locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' ) my_str = "(4,301)" result = -locale.atoi(my_str.translate(None,"()"))
Assuming just removing the ,
is safe enough, and you may wish to apply the same function to values that may contain negative numbers or not, then:
import re print float(re.sub(r'^\((.*?)\)$', r'-\1', a).replace(',',''))
You could then couple that with using locale
as other answers have shown, eg:
import locale, re locale.setlocale(locale.LC_ALL, 'en_GB.UTF-8') print locale.atof(re.sub('^\((.*?)\)$', r'-\1', a))
Presumably you want to handle positive numbers as well as negative, which is missing from many of the answers thus far. I'm going to add a bit to the answer from mogul.
import locale locale.setlocale( locale.LC_ALL, '') my_str = '( 4,301 )' positive = my_str.translate(None, '()') result = locale.atoi(positive) if positive == my_str else -locale.atoi(positive)
This code could be a little bit longer, but straight forward and easy to maintain
from pyparsing import Word, nums, OneOrMore integer = Word(nums) text = "blah blah (4,301) blah blah " parser = OneOrMore(integer) iterator = parser.scanString( text ) try: while True: part1 = iterator.next() part2 = iterator.next() except: x = part1[0][0][0] + '.' +part2[0][0][0] print -float(x)
Produces: -4.301