对于python中的某些机器控制,我将结果写入文本文件,其他人可以将其复制到Excel中(在这种情况下这是最方便的方法(。但是,在荷兰,Excel 有一个逗号作为小数分隔符,因此我希望文本文件中的结果"位置"为 123,456,但是当我使用 f 字符串方法时,如下所示:
resultfile.write(f"Positiont{position:.5}")
这显然会导致点小数分隔符。
如何在不遍历整个文件的情况下将其更改为逗号,并将点替换为逗号?
f 字符串中使用逗号格式化浮点数,则可以在将浮点数转换为字符串后使用 replace :
position = 123.456
f"Positiont{str(position).replace('.',',')}"
第二种选择是使用 Python 标准库模块语言环境(但它不是线程安全的(:
import locale
locale.setlocale(locale.LC_ALL, 'nl_NL')
f"Positiont{locale.format('%.3f', position)}"
第三种选择是使用库 babel(在库例程的情况下首选(:
from babel.numbers import format_decimal
f"Positiont{format_decimal(position, locale='nl_NL')}"
对于给定的示例,所有三个选项都返回相同的结果:
'Positiont123,456'
正如@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!)
如果您希望避免依赖关系,以下简单函数可能适合您的需求:
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'
如果g
格式对您来说足够好,请改用n
:
resultfile.write(f"Positiont{position:.7n}")
虽然n
工作(使用时使用时使用当前语言环境设置(而不是同时d
和g
,但不幸的是,f
格式没有这样的事情......
更简单的解决方案可能是:
f"Positiont{position:,.5f}"