跳转到主要内容

物理单位转换工具 -- 对油和化学品泄漏响应有用的单位

项目描述

Python NOAA 单位转换器 -- 油污事故

此存储库提供了一个用于物理单位转换的 Python 包。它包括用于油污事故响应和规划的奇数单位(API 密度等),但不包括其他领域可能需要的奇数单位。

它还包括许多通用单位,适用于一般用途。

注意:NUCOS 不 正确 管理物理量 – 而是有助于以人类经常采取的随意方式处理单位。例如,“磅”被认为是质量单位,可以转换为,例如,千克 – 这 不是 物理上正确的,但它是实用的。

它还处理严格无尺寸的“单位”,例如质量分数:例如 g/kg。这很有用,因为您可以将它们转换为其他无尺寸的“单位”,例如百分比。但它确实区分了,例如,质量分数和体积分数,因此您不能在 g/kg 和 ml/l 等之间进行转换。

还有一些不是严格单位转换的实用工具

  • 将经纬度从/到度,度分秒等(并格式化为 Unicode 对象)进行转换

注意:经纬度解析和格式化也可在经纬度解析器项目中找到

  • 将油质量单位转换为/从体积单位:例如吨到桶。

安装

自第3版起,PyNUCOS已发布到PyPi和conda-forge,当然,也可以从源码安装。

从PyPi安装

pip install pynucos

从conda-forge安装

conda install pynucos -c conda-forge

(如果您已经拥有conda-forge通道,则-c conda-forge是可选的)

从源码安装

从GitHub获取源码

https://github.com/NOAA-ORR-ERD/PyNUCOS

然后是常规操作

pip install ./

使用案例

现在有许多单位转换代码,但没有一个能够轻松支持石油泄漏响应(以及石油行业的总体情况)中使用的奇怪单位,例如API比重和从质量到体积的石油数量转换。

该代码用作桌面单位转换应用程序的核心库

https://github.com/NOAA-ORR-ERD/wxNUCOS

您可以从以下位置获取可安装的二进制文件

http://response.restoration.noaa.gov/oil-and-chemical-spills/oil-spills/response-tools/nucos-unit-converter-spill-responders.html

该代码还用于NOAA石油泄漏建模工具

https://response.restoration.noaa.gov/oil-and-chemical-spills/oil-spills/response-tools/gnome-suite-oil-spill-modeling.html

GitHub上可在此处获取

https://github.com/NOAA-ORR-ERD

JavaScript版本

还有一个可供在浏览器客户端应用程序中使用的JavaScript版本

https://github.com/NOAA-ORR-ERD/jsNUCOS

用法

大多数主要功能都可以通过单个函数获得

In [7]: from nucos import convert

In [8]: convert('gal', 'liter', 1.0)
Out[8]: 3.7854118

然而,一些单位名称可能具有不同的含义,例如液体盎司和重量盎司,因此不能进行转换

In [9]: convert('oz', 'ml', 1.0)
---------------------------------------------------------------------------
UnitConversionError                       Traceback (most recent call last)
<ipython-input-9-86edffc0a76a> in <module>
----> 1 convert('oz', 'ml', 1.0)

~/Hazmat/ERD-PythonPackages/PyNUCOS/nucos/unit_conversion.py in convert(unit1, unit2, value, unit_type)
    464
    465         if unit_type != unit_type2:
--> 466             raise UnitConversionError("Cannot convert {0} to {1}"
    467                                       .format(unit1, unit2))
    468

UnitConversionError: Cannot convert oz to ml

为了更清晰地指定,可以将单位类型作为第一个参数传递

In [10]: convert('volume', 'oz', 'ml', 1.0)
Out[10]: 29.57353

In [16]: convert('mass', 'oz', 'gram', 1.0)
Out[16]: 28.349523

纬度经度转换

有函数可以将纬度和经度转换为各种格式。

传递ustring=True以获取Unicode格式的字符串版本。

In [24]: from nucos import LatLongConverter

In [25]: LatLongConverter.ToDecDeg(-45, 34, 12)
Out[25]: -45.57

In [26]: LatLongConverter.ToDecDeg(-45, 34, 12, ustring=True)
Out[26]: '-45.570000°'

In [27]: LatLongConverter.ToDegMin(-45.57)
Out[27]: (-45.0, 34.2)

In [28]: LatLongConverter.ToDegMin(-45.57, ustring=True)
Out[28]: "-45° 34.200'"

In [29]: LatLongConverter.ToDegMinSec(-45.57)
Out[29]: (-45.0, 34, 12.0)

In [30]: LatLongConverter.ToDegMinSec(-45.57, ustring=True)
Out[30]: '-45° 34\' 12.00"'

单位名称

单位名称是简单的字符串,并且有很多同义词,包括ASCII和Unicode格式。

完整的单位和名称列表在NUCOS_unit_list.rst文件中。

您可以通过各种实用函数以编程方式访问单位类型、单位名称等。

# get the names for a given unit type
nucos.get_supported_names('mass')
Out[15]:
['kilogram',
 'kg',
 'kilograms',
 'lb',
 'pounds',
 'lbs',
 'g',
 'grams',
 'mg',
 'µg',
 'ug',
 'tons',
 'uston',
 'tonne',
 'tonnes',
 'metric ton',
 'metric tons',
 'mt',
 'slugs',
 'oz',
 'ounces',
 'ukton',
 'long ton']

# all the available types
In [3]: nucos.get_unit_types()
Out[3]:
['Length',
 'Oil Concentration',
 'Area',
 'Volume',
 'Temperature',
 'Delta Temperature',
 'Mass',
 'Time',
 'Velocity',
 'Discharge',
 'Mass Discharge',
 'Density',
 'Kinematic Viscosity',
 'Dynamic Viscosity',
 'Interfacial Tension',
 'Pressure',
 'Concentration In Water',
 'Concentration',
 'Dimensionless',
 'Mass Fraction',
 'Volume Fraction',
 'Angular Measure',
 'Angular Velocity']


# Get the primary (spelled out) name for a unit
In [5]: nucos.get_primary_name('mg')
Out[5]: 'milligram'

# Get the abbreviation (short form) for a unit:
In [7]: nucos.get_abbreviation('microgram')
Out[7]: 'µg'

发行历史

版本3.2.0

添加了一些用于处理名称的实用程序。

版本3.1.2

为每秒米添加了一些同义词。

版本3.1.1

修复了GetUnitNames()和大小写的问题。

版本3.1.0

添加了获取给定单位类型的有效单位名称的代码。

版本3.1.0

添加了获取给定单位类型的有效单位名称的代码。

版本3.0

这是PyPi上的第一次发布——本次发布的主要变化是顶级包名现在是nucos——它以前是unit_conversion。仍然存在unit_conversion名称,但应该引发DeprecationWarning

贡献

如果您有任何改进建议、错误修复等,请向GitHub上的问题帖子提交

https://github.com/NOAA-ORR-ERD/PyNUCOS

或者更好的是,创建一个Pull Request。

开发说明

测试

在nucos/tests中有相当全面的测试集

nucos/tests

它们可以用pytest运行——可以直接运行

pytest nucos/tests

或者安装在包上

pytest --pyargs nucos

新的单位/单位名称

任何额外的单位都应添加到

nucos/unit_data.py

这是一个大型的嵌套字典,其中包含单位、转换因子和同义词。希望它是自我描述的:-)

如果您添加了新的单位,请添加一个测试。

在做出任何更改后,请务必运行测试——这将捕获格式错误、重复名称等问题。

发布

可以直接在主分支上完成小的更改。

新版本的检查清单

  • 当然,确保所有测试都通过

  • 确保版本设置正确:在nucos/__init__.py

  • 确保NUCOS_unit_list.rst已更新——它在运行测试时应该发生。

  • 推送到GitHub

  • 在GitHub上发布版本 - 遵循那里的标签约定。

  • 发布后,在主分支中增加 __version__

  • 推送到PyPi:- conda install twine build(您也可以使用pip安装这些)- python -m build - twine upload dist/*

注意:此时,只有Chris Barker有权限在PyPi上执行此操作 - 因此要么请他帮忙,要么请求他给予权限。

  • 在conda-forge上检查构建:conda-forge应该检测到在GitHub上发布了版本,然后构建一个新的包 - 您可以在这里检查进度

https://github.com/conda-forge/pynucos-feedstock

ChrisBarker-NOAA和JamesMakela-NOAA有权限访问feedstock。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

pynucos-3.2.2.tar.gz (32.8 kB 查看哈希值)

上传时间 源代码

构建发行版

pynucos-3.2.2-py3-none-any.whl (31.8 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面