В документации для pygrib
показана функция fromstring
, которая создает экземпляр gribmessage из объект python bytes, представляющий двоичное сообщение grib. Возможно, я неправильно понимаю назначение этой функции, но это наводит меня на мысль, что я могу использовать ее вместо загрузки файла GRIB и применения к нему функции open
. К сожалению, мои попытки открыть файл GRIB с несколькими сообщениями из NLDAS2 не увенчались успехом. Кто-нибудь еще знает, как использовать 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 с несколькими сообщениями, но авторы открыты для запроса на включение, если кто-то хочет написать код. К сожалению, моя исследовательская направленность сместилась, и у меня нет времени, чтобы внести свой вклад.
pygrib.open(filename)
- person FlippingBinary   schedule 11.05.2020pygrib.fromstring()
очевидно работает с одним сообщением GRIB - это не то, что вы можете перебирать. Вам придется каким-то образом разделить полученные данные на отдельные сообщения (я понятия не имею, как вы это сделаете) и вызвать.fromstring()
для них по отдельности. - person jasonharper   schedule 11.05.2020