Как отформатировать число с запятой в качестве десятичного разделителя в f-строке? - PullRequest
1 голос
/ 27 марта 2019

Для некоторого машинного управления в python я записываю результаты в текстовый файл, который кто-то может скопировать в Excel (это наиболее удобный способ в этой ситуации). Тем не менее, в Нидерландах Excel имеет запятую в качестве десятичного разделителя, и поэтому я хочу, чтобы результат "позиция" в текстовом файле был 123 456, но когда я использую метод f-строки, как этот:

    resultfile.write(f"Position\t{position:.5}")

Это, очевидно, приведет к десятичному разделителю точек.

Как я могу изменить это на запятую без перебора всего файла до конца и заменить точки запятыми?

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Более простое решение может быть:

f"Position\t{position:,.5f}"
0 голосов
/ 14 июня 2019

Если вы хотите отформатировать числа с запятой внутри строки f, вы можете использовать замену после преобразования числа в строку:

position = 123.456
f"Position\t{str(position).replace('.',',')}"

Второй вариант - использовать языковой стандарт модуля стандартной библиотеки Python (, но он не является поточно-ориентированным ):

import locale
locale.setlocale(locale.LC_ALL, 'nl_NL')
f"Position\t{locale.format('%.3f', position)}"

Третий вариант - использовать библиотеку babel (предпочтительно в случае библиотечных процедур):

from babel.numbers import format_decimal
f"Position\t{format_decimal(position, locale='nl_NL')}"

Все три параметра возвращают одинаковый результат для данного примера:

'Position\t123,456'
...