假设我有一个任意品脱数量的q。有没有一种方法可以用符号短的形式来显示它的单位,而不是作为一个全长的单词?
换句话说,我如何编写unit_symbol()代码,使其返回"m",而不是“m”;"kg“,而不是”kg“;等等?有没有办法检索与数量的当前单位同义词的简写单位符号?
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"上面的代码显然无法实现这一点;它返回的是长形式的单元。
发布于 2021-01-12 18:51:31
可以使用'~'作为单位格式的等级库:
q = Q_(42, "m") / Q_(1, "second")
print(format(q, '~')) # 42.0 m / s
print(format(q.u, '~')) # m / s这个特性显然没有文档,但是可以从Unit.__format__的source code中推断出来(在该页面上搜索"~"可以快速导航到相关的代码段)。
发布于 2021-01-12 18:07:58
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 registryhttps://stackoverflow.com/questions/65681490
复制相似问题