12

在 Python 中,将括号中的数字(字符串)转换为负整数(或浮点数)的最简单方法是什么?

例如,'(4,301)' 到 -4301,这在会计应用程序中很常见。

4

7 回答 7

13

最简单的方法是:

my_str = "(4,301)"
num = -int(my_str.translate(None,"(),"))
于 2013-05-23T16:04:01.513 回答
7

由于您正在从一个包含数千个分隔符的系统中读取,因此值得一提的是,我们在世界各地使用它们的方式不同,这就是您应该考虑使用语言环境系统的原因。考虑:

import locale
locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' )
my_str = "(4,301)"
result = -locale.atoi(my_str.translate(None,"()"))
于 2013-05-23T16:11:14.730 回答
4

假设仅删除,就足够安全,并且您可能希望将相同的函数应用于可能包含或不包含负数的值,然后:

import re
print float(re.sub(r'^\((.*?)\)$', r'-\1', a).replace(',',''))

然后,您可以将其与locale其他答案所示的 using 结合使用,例如:

import locale, re

locale.setlocale(locale.LC_ALL, 'en_GB.UTF-8')
print locale.atof(re.sub('^\((.*?)\)$', r'-\1', a))
于 2013-05-23T16:14:23.557 回答
4

对于 Python 3.6,也将 '-' 处理为 0,并去除多余的空格:

def clean_num(num_string):
    bad_chars = '(),-'
    translator = str.maketrans('', '', bad_chars)
    clean_digits = num_string.translate(translator).strip()

    if clean_digits == '':
        return 0
    elif '(' in num_string:
        return -float(clean_digits)
    else:
        return float(clean_digits) 
于 2019-05-13T06:22:26.177 回答
2

大概你想处理正数和负数,这是迄今为止许多答案中所缺少的。我将在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)
于 2013-05-23T16:40:03.070 回答
1

对于本地化的数字,我使用这个:

def clean_number(text):
    import locale
    locale.setlocale(locale.LC_NUMERIC, "Portuguese_Brazil.1252")
    tbl = str.maketrans('(', '-', 'R$ )')
    return locale.atof(text.translate(tbl))

适用于 Python 3.8。第一个括号被减号替换,第二个被删除。还删除了空格和货币符号。

于 2020-04-16T15:12:58.093 回答
0

这段代码可能会长一点,但直截了当且易于维护

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)

生产-4.301

于 2013-05-23T16:27:05.440 回答