Разобрать строку с плавающей точкой с разными разделителями - PullRequest
3 голосов
/ 10 февраля 2012

У меня есть несколько строк, которые представляют числа, которые используют запятые или точки для разделения тысяч и имеют различные плавающие разделители.Например:

"22 000,76", "22 000,76", "22 000,76", "1022000,76", "-1 022 000,76", "1022000", "22 000,76 $"," $ 22 000,76 "

Как я могу преобразовать их в числа с плавающей точкой в ​​Python?

В PHP я использую такую ​​функцию: http://docs.php.net/manual/sr/function.floatval.php#84793

Ответы [ 2 ]

5 голосов
/ 10 февраля 2012
import re
import locale

# Remove anything not a digit, comma or period
no_cruft = re.sub(r'[^\d,.-]', '', st)

# Split the result into parts consisting purely of digits
parts = re.split(r'[,.]', no_cruft)

# ...and sew them back together
if len(parts) == 1:
    # No delimeters found
    float_str = parts[0]
elif len(parts[-1]) != 2:
    # >= 1 delimeters found. If the length of last part is not equal to 2, assume it is not a decimal part
    float_str = ''.join(parts)
else:
    float_str = '%s%s%s' % (''.join(parts[0:-1]),
                            locale.localeconv()['decimal_point'],
                            parts[-1])

# Convert to float
my_float = float(float_str)
0 голосов
/ 10 февраля 2012

Предположим, у вас есть максимум 2 десятичных цифры:

sign_trans = str.maketrans({'$': '', ' ':''})
dot_trans = str.maketrans({'.': '', ',': ''})

def convert(num, sign_trans=sign_trans, dot_trans=dot_trans):
    num = num.translate(sign_trans)
    num = num[:-3].translate(dot_trans) + num[-3:]
    return float(num.replace(',', '.'))

Я проверяю это на вашем примере:

>>> for n in nums:
...     print(convert(n))
...
22000.76
22000.76
22000.76
1022000.76
-1022000.76
1022000.0
22000.76
22000.76
...