对于Python中的一些机器控制,我将结果写入文本文件,以便其他人可以将其复制到Excel中(在这种情况下,这是最方便的方法)。然而,在荷兰,Excel使用逗号作为小数分隔符,因此我希望在文本文件中将“位置”结果显示为123,456。但是,当我使用如下的f-string方法时:
resultfile.write(f"Position\t{position:.5}")
这显然会导致使用点作为小数分隔符。
我该如何在不迭代整个文件并替换点号的情况下将其更改为逗号?
对于Python中的一些机器控制,我将结果写入文本文件,以便其他人可以将其复制到Excel中(在这种情况下,这是最方便的方法)。然而,在荷兰,Excel使用逗号作为小数分隔符,因此我希望在文本文件中将“位置”结果显示为123,456。但是,当我使用如下的f-string方法时:
resultfile.write(f"Position\t{position:.5}")
如果你想在f-string中使用逗号格式化浮点数,可以将浮点数转换为字符串后再使用replace函数:
position = 123.456
f"Position\t{str(position).replace('.',',')}"
第二个选择是使用Python标准库模块locale (但它不是线程安全的):
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'
def comma_num(n,f=''):
return ('{'+f+'}').format(n).replace('.',',')
n = 1.23
f'Whatever {comma_num(n)}'
'Whatever {}'.format(comma_num(n))
>>>'Whatever 1,23'
f'Whatever {comma_num(n,":6.4f")}'
'Whatever {}'.format(comma_num(n,':6.4f'))
>>>'Whatever 1,2300'
正如 @michel-de-ruiter 提到 的那样,f
格式不能与区域设置一起使用。另一方面,您无法使用 n
格式设置精度。例如,如果您想要小数点后4位:
import locale
locale.setlocale(locale.LC_ALL, 'nl_NL')
position = 123.45678999
print(f'{position:.4n}') # output: 123,4 (not quite what we wanted!)
print(f'{round(position, 4):n}') # output: 123,4567 (that's it!)
g
格式已经满足您的需求,可以使用n
代替:resultfile.write(f"Position\t{position:.7n}")
虽然n
可以使用当前区域设置,但无法替代d
和g
。不幸的是,对于f
格式没有这样的选项...
f"Position\t{position:,.5f}"
,
),却没有改变小数分隔符(仍然是.
)。 - Michel de Ruiter
f"Position\t{position:.5}".replace('.', ',')
应该可以正常工作,对吧? - Arne