Python - Можно ли использовать локаль для преобразования чисел, содержащих пробелы? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть текстовый файл с числами и я пытаюсь их преобразовать. Числа имеют фиксированную ширину и отформатированы в немецком стиле, но между знаком минус и цифрами есть пробелы, например '- 15,13'.

Я мог бы легко удалить пробелы. Но я новичок в locale, и мне интересно, можно ли его использовать исключительно для преобразования таких чисел? В таком случае, как мне изменить конфигурацию?

import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
s = '-         15,13'
f = locale.atof(s)

Я получаю ValueError: не удалось преобразовать строку в float: '- 15.13'

locale.localeconv() показывает:

{'int_curr_symbol': 'EUR', 'currency_symbol': '€', 'mon_decimal_point': ',', 'mon_thousands_sep': '.', 'mon_grouping': [3, 0], 'positive_sign': '', 'negative_sign': '-', 'int_frac_digits': 2, 'frac_digits': 2, 'p_cs_precedes': 0, 'p_sep_by_space': 1, 'n_cs_precedes': 0, 'n_sep_by_space': 1, 'p_sign_posn': 1, 'n_sign_posn': 1, 'decimal_point': ',', 'thousands_sep': '.', 'grouping': [3, 0]}

Эквивалент для США:

import locale
locale.setlocale(locale.LC_ALL, 'en_US')
s = '- 234,567.89'
locale.atof(s)

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Это всегда так, как будто у вас есть только эти места? Если это так, вы можете сделать что-то вроде этого:

to_be_converted = '-         15,13'

str_num1 , str_num2 = to_be_converted.replace(' ', '').split(',')

num1, num2 = int(str_num1), int(str_num2)

print(num1, num2)
#-15 13
print(type(num1), type(num2))
#<class 'int'> <class 'int'>
0 голосов
/ 10 июля 2020

Нет, так не работает. locale.atof() вызывает функцию, которая удаляет разделители тысяч и устанавливает десятичную точку в точку. Затем результат передается в float(), что вызывает ValueError.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...