3

文档pygrib显示了一个名为的函数,该函数fromstring从表示二进制 grib 消息的 python 字节对象创建 gribmessage 实例。我可能会误解此功能的用途,但它让我相信我可以使用它来代替下载 GRIB 文件并open在其上使用该功能。不幸的是,我尝试从 NLDAS2 打开多消息 GRIB 文件失败了。有没有人知道如何pygrib在不先保存文件的情况下使用 GRIB 数据?我下面的代码显示了我希望它如何工作。相反,它给出了TypeError: expected bytes, int found在线错误for grib in gribs:

from urllib import request
import pygrib

url = "<remote address of desired file>"
username = "<username>"
password = "<password>"

redirectHandler = request.HTTPRedirectHandler()
cookieProcessor = request.HTTPCookieProcessor()
passwordManager = request.HTTPPasswordMgrWithDefaultRealm()
passwordManager.add_password(None, "https://urls.earthdata.nasa.gov", username, password)
authHandler = request.HTTPBasicAuthHandler(passwordManager)
opener = request.build_opener(redirectHandler, cookieProcessor, authHandler)
request.install_opener(opener)

with request.urlopen(url) as response:
    data = response.read()
    gribs = pygrib.fromstring(data)
    for grib in gribs:
        print(grib)

编辑以添加整个错误输出:

Traceback (most recent call last):
  File ".\example.py", line 19, in <module>
    for grb in grbs:
  File "pygrib.pyx", line 1194, in pygrib.gribmessage.__getitem__
TypeError: expected bytes, int found

编辑:此界面不支持多消息 GRIB 文件,但如果有人想编写代码,作者可以接受拉取请求。不幸的是,我的研究重点已经转移,我没有时间为自己做出贡献。

4

1 回答 1

2

正如 jasonharper 所说,您可以使用 pygrib.fromstring()。我自己试过了,这行得通。

这是文档的链接

于 2020-10-15T14:38:54.140 回答