将 grib2 文件转换为 csv

Posted

技术标签:

【中文标题】将 grib2 文件转换为 csv【英文标题】:Convert grib2 files to csv 【发布时间】:2021-06-06 22:14:44 【问题描述】:

我正在处理 grib2 文件的分类问题。我一直在尝试Xarray, pynio, pygrib 来读取这些数据,但还没有解决。谁能解释一下 grib2 文件的结构是什么?它们是如何创建的?有什么快速的方法可以将它们转换成csv

【问题讨论】:

wgrib2 实用程序是快捷方式。 是 grib 1 还是 grib 2 文件? grib 1 是一种较旧的格式,所以我假设 grib 2。wgrib2 似乎具有将 grib2 数据导出为 csv 文件的功能。如果 wgrib2 不适合您,您是否有尝试转换为 csv 的文件示例? 【参考方案1】:

    我建议使用cfgrib。它是使用 eccodes 的最先进的 python 工具。它完全集成到 xarray 中。

    当您打开 grib 文件时,您应该知道以下两种方法: 第一个需要(如果文件中有多个变量)过滤器参数:

import xarray

grib_data = xarray.open_dataset('/path/to/your/grib_file.grb', engine='cfgrib', backend_kwargs='filter_by_keys':'typeOfLevel': 'heightAboveGround','level': 2)

要从文件中获取所有变量,您可以使用 cfgrib 的 open_datasets:

import cfgrib
grib_data = cfgrib.open_datasets('/path/to/your/grib_file.grb')

grib_data 将是xarray.Dataset 的列表。

    如果您收到paramId0 等默认参数名称,您可能需要正确的 grib 表。这些由发布 grib 文件的气象服务提供,应放在ECCODES_DEFINTION_PATH

【讨论】:

嗨,关于第三点,我有这个问题,一些变量是 paramId0 或未知。更新gib表的方法是什么?这些表是什么类型的文件? 您可以在此处找到德国气象局的 grib 表:rcc.dwd.de/DE/leistungen/opendata/… 您只需像为 PYTHONPATH 所做的那样向 ECCODES_DEFINTION_PATH 添加另一个路径。 我正在使用 cfgrib lib(通过 xarray),我意识到 eccodes 表来自 ECMWF,与 NOAA grib2 变量不对应。我看到 python pywgrib2 还有另一个库。我将尝试使用其他选项并交叉手指... 最后,我将不存在的变量添加到一些 eccodes 文件中,并使用 xarray 和 cfgrib。我没有从与 eccodes 表系统兼容的 noaa 中找到任何可下载的表。 嗯,这就是为什么 grib 格式不能真正像 WMO 预期的那样工作的原因。它应该有助于以简单的标准在全球范围内处理天气预报,但在我看来,由于这些问题,它已经失败了。每个权限都可以将他们想要的内容写入文件并在其他 grib 表中进行定义。如果它们不可用,则很难从文件中获取数据。这就是为什么我更喜欢使用 netcdf4。它有一个结构良好的标题,包含所有信息。不需要额外的表格。最好的问候;)【参考方案2】:

GRIB2 与 GRIB1 类似,将消息划分为消息,并将每个消息分为多个部分。 一个 GRIB 文件中可以有更多消息。只是彼此串联。如果您有 2 个 GRIB2 文件并想要合并它们,那么简单地使用 cat 命令就足够了。

此处描述了 GRIB2 示例:https://www.yumpu.com/en/document/view/11723135/guide-to-wmo-table-driven-code-forms。一个很好的在线资源:

https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/ https://apps.ecmwf.int/codes/grib/format/grib2/

网上资料更详细地描述了不同部分的参数。

虽然 GRIB2 的基本概念和消息开头与 GRIB1 相似,但在后面的部分 (1-7) 中却大不相同。 GRIB2 还允许在一条消息中重复某些部分:

Section 0: Indicator Section
Section 1: Identification Section
Section 2: Local Use Section (optional)                                  |
Section 3: Grid Definition Section                       |               |
Section 4: Product Definition Section    |               |               |
Section 5: Data Representation Section   | (repeated)    | (repeated)    | (repeated)
Section 6: Bit-Map Section               |               |               |
Section 7: Data Section                  |               |               |
Section 8: End Section

Section 0:在 GRIB2 中始终为 16 个字节(在 GRIB1 中为 8 个字节),包含消息(所有部分)grib 版本 (GRIB1/GRIB2) 的总 length,以防万一GRIB2 的消息规则。

在 GRIB2 中,每个部分(第 1 和 8 部分除外)都以该部分的 length(4 个字节)和 section number(1 个字节)开头。因此,当您阅读二进制 GRIB2 文件时,您可以相对简单地将 GRIB2 消息分成几个部分。

第 8 节:总是包含 4 个字节,一个字符串:7777

分类

每个 GRIB 文件可以包含多条消息。消息是网格(第 3 节)产品定义(第 4 节,其中之一:风、温度、相对湿度……)和数据(第 7 节)。这意味着在每个文件中,您可能有不同的数据(风速、气温、当前方向……)。如果您想对这些文件进行分类,您可能应该查看产品定义部分(第 4 部分)。

请注意,一条消息通常指的是一个参考时间(测量或创建数据集的时间),定义在识别部分(第 1 节)和一个预测时间 (数据(例如温度)有效的时间),在产品定义部分(第 4 部分)中定义

转换为 CSV

您可以在数据表示部分(第 5 部分)的帮助下阅读数据部分(第 7 部分)以获取实际数据。使用 wgrib2 (https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/),您可以轻松地将数据转储到文件中。请注意,要了解数据代表什么以及它们使用什么单位,您还需要考虑产品定义部分(第 4 部分)。

请注意,数据部分(第 7 部分)中的数据已编码。数据表示部分(第 5 节)中描述了它们是如何编码的。在某些情况下,还有一个非空位图部分(第 6 部分),它说明哪些位置有有效值。一个例子可能是云量的百分比。位图部分将定义网格上是否存在任何云层的点(true/false 位数组)。数据部分仅包含有一些云层的点(位图部分位为true)并存储0-100%之间的值。这是减少空间的方法之一。

【讨论】:

以上是关于将 grib2 文件转换为 csv的主要内容,如果未能解决你的问题,请参考以下文章

无法将 .json 文件从 CSV 下载到 JSON 转换并且无法将 JSON 转换为 CSV

将 xls 文件批量转换为 csv

将数据源 UICollectionView 转换为 CSV 文件

将大量 .csv 文件转换为 SPSS 文件

将 CSV 转换为 MYSQL 文件

如何使用 shell 脚本将 xlsx 文件转换为 csv 文件?