首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Pint单位格式化为短格式符号

将Pint单位格式化为短格式符号
EN

Stack Overflow用户
提问于 2021-01-12 17:51:38
回答 2查看 266关注 0票数 2

假设我有一个任意品脱数量的q。有没有一种方法可以用符号短的形式来显示它的单位,而不是作为一个全长的单词?

换句话说,我如何编写unit_symbol()代码,使其返回"m",而不是“m”;"kg“,而不是”kg“;等等?有没有办法检索与数量的当前单位同义词的简写单位符号?

代码语言:javascript
复制
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"

上面的代码显然无法实现这一点;它返回的是长形式的单元。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-12 18:51:31

可以使用'~'作为单位格式的等级库:

代码语言:javascript
复制
q = Q_(42, "m") / Q_(1, "second")

print(format(q, '~'))  # 42.0 m / s
print(format(q.u, '~'))  # m / s

这个特性显然没有文档,但是可以从Unit.__format__source code中推断出来(在该页面上搜索"~"可以快速导航到相关的代码段)。

票数 2
EN

Stack Overflow用户

发布于 2021-01-12 18:07:58

我找到了UnitRegistry.get_symbol()

代码语言:javascript
复制
ureg.get_symbol(str(q.units))  # "m"

但这看起来有点笨拙:将单元转换为字符串,然后再次解析该字符串……

同样,这对于复合单元也是失败的。

代码语言:javascript
复制
q = Q_(42, "m") / Q_(1, "second")
ureg.get_symbol(str(q.units))  
# UndefinedUnitError: 'meter / second' is not defined in the unit registry
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65681490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档