将品脱单位格式化为缩写符号

2024-05-29 11:55:35 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个任意的品脱量q。有没有一种方法可以将其单位显示为符号缩写形式,而不是完整的单词

换句话说,我如何编码unit_symbol(),使其返回“m”,而不是“meter”;“千克”不是“千克”;等是否有方法检索与数量当前单位同义的缩写形式单位符号

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"

上述措施显然未能做到这一点;它返回长格式单位


Tags: 方法returnetc符号notunit单位symbol
2条回答

我发现^{}

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

此功能显然没有文档记录,但可以从Unit.__format__source code中推断出来(在该页面上搜索"~"以快速导航到相关代码段)

相关问题 更多 >

    热门问题