将 Pint 单位格式化为 short-form 符号
Format Pint unit as short-form symbol
假设我有任意 Pint 个数量 q
。有没有办法以符号缩写形式显示其单位,而不是 full-length 单词?
换句话说,我如何编码 unit_symbol()
使其 returns 是“m”,而不是“meter”; “公斤”不是“千克”; ETC。?有没有办法检索与数量的当前单位同义的 short-form 单位符号?
import pint
ureg = pint.UnitRegistry()
Q_ = ureg.Quantity
def unit_symbol(q: pint.Quantity) -> str:
# Intended to return "m", not "meter"
# "kg" not "kilogram"
# etc.
# ???
return q.units # returns long-form unit, "meter", "kilogram" etc. :-(
q = Q_(42, ureg.m)
print(unit_symbol(q)) # "meter"... whereas I would like "m"
上面显然没有达到这个目的;它 returns long-form 单位。
我找到了 UnitRegistry.get_symbol()
,
ureg.get_symbol(str(q.units)) # "m"
但它似乎有点笨拙:将单位转换为字符串,然后再次解析该字符串...
这对于复合单位也是失败的,例如
q = Q_(42, "m") / Q_(1, "second")
ureg.get_symbol(str(q.units))
# UndefinedUnitError: 'meter / second' is not defined in the unit registry
您可以使用 '~'
作为单位格式的规范:
q = Q_(42, "m") / Q_(1, "second")
print(format(q, '~')) # 42.0 m / s
print(format(q.u, '~')) # m / s
此功能显然没有记录,但可以从 source code for Unit.__format__
中推断出来(在该页面上搜索 "~"
以快速导航到相关代码段)。
如果您希望默认使用短符号,请使用 ureg.default_format = '~'
。这些也是短单元的有效选项:~L
(LaTeX)、~H
(HTML) 和 ~P
(Pretty print)。
假设我有任意 Pint 个数量 q
。有没有办法以符号缩写形式显示其单位,而不是 full-length 单词?
换句话说,我如何编码 unit_symbol()
使其 returns 是“m”,而不是“meter”; “公斤”不是“千克”; ETC。?有没有办法检索与数量的当前单位同义的 short-form 单位符号?
import pint
ureg = pint.UnitRegistry()
Q_ = ureg.Quantity
def unit_symbol(q: pint.Quantity) -> str:
# Intended to return "m", not "meter"
# "kg" not "kilogram"
# etc.
# ???
return q.units # returns long-form unit, "meter", "kilogram" etc. :-(
q = Q_(42, ureg.m)
print(unit_symbol(q)) # "meter"... whereas I would like "m"
上面显然没有达到这个目的;它 returns long-form 单位。
我找到了 UnitRegistry.get_symbol()
,
ureg.get_symbol(str(q.units)) # "m"
但它似乎有点笨拙:将单位转换为字符串,然后再次解析该字符串...
这对于复合单位也是失败的,例如
q = Q_(42, "m") / Q_(1, "second")
ureg.get_symbol(str(q.units))
# UndefinedUnitError: 'meter / second' is not defined in the unit registry
您可以使用 '~'
作为单位格式的规范:
q = Q_(42, "m") / Q_(1, "second")
print(format(q, '~')) # 42.0 m / s
print(format(q.u, '~')) # m / s
此功能显然没有记录,但可以从 source code for Unit.__format__
中推断出来(在该页面上搜索 "~"
以快速导航到相关代码段)。
如果您希望默认使用短符号,请使用 ureg.default_format = '~'
。这些也是短单元的有效选项:~L
(LaTeX)、~H
(HTML) 和 ~P
(Pretty print)。