【问题标题】:How can I print numbers in python with thin space characters as the thousands separators?如何在 python 中打印带有细空格字符作为千位分隔符的数字?
【发布时间】:2018-11-13 09:49:18
【问题描述】:

我知道例如 "{:,}".format(123456789) 将在 python 中打印 '123,456,789' 作为输出。

但是,我希望将细空格字符用作千位分隔符,而不是逗号。根据here,细空格字符的python源编码为u"\u2009"。

所以我尝试用 u"\u2009" 替换 "{:,}" 中的逗号,但这会导致语法错误。这可能是因为 python 无法处理生成的嵌套双引号,并且需要转义某些内容。

那么有没有办法使这个或其他机制起作用?顺便说一句,我也想禁止出现在输出中的单引号。

【问题讨论】:

  • 这将有助于显示一个示例和确切的错误。 "{:\u2009}".format(123456789) 给出不同的错误:ValueError: Unknown format code '\x2009' for object of type 'int' 但至少它不是语法错误!
  • 根据docs.python.org/3/library/…,您只能将_, 作为分组选项。因此,您应该使用下面答案中提到的字符串替换。
  • 如果您的问题得到解答,请mark the most helpful answer as accepted。您可以通过单击答案左侧的灰色复选标记将其切换为绿色来接受答案。谢谢。

标签: python python-3.x formatting output


【解决方案1】:

您可以在格式化后使用str 中的replace 方法将, 替换为细空格,即:"{:,}".format(123456789).replace(",", u"\u2009")

根据官方文档here,只有,_可以用作分隔符。要使用用户定义的,您需要使用n 表示,并更改您的locale 设置(请参阅https://docs.python.org/3/library/locale.html#locale.LC_NUMERIC)。您可以创建一个新的本地化并使用这个假本地化来满足您的需求,但这是一个相当复杂的解决方案。

编辑:通过虚假本地化,我的意思是您计算机中的新语言环境,而不是 Python。您可以阅读https://askubuntu.com/questions/653008/how-to-create-a-new-system-locale 了解更多详细信息(我认为这可以适用于大多数发行版)

【讨论】:

    【解决方案2】:

    我可以为您提供一个明显的解决方法:

    >>> n = 123456789
    >>> print(f'{n:,}'.replace(',', u'\u2009'))
    123 456 789
    

    同样适用于str.format

    【讨论】:

    • 很久以前我在 python 和 ipython 中都试过你的解决方案,但在这两种情况下,千位分隔符都是空格而不是细空格。我很困惑你是如何得到一个薄空间的,因为至少在我的 Mac 的 python 上,薄空间被渲染为一个空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多