Как использовать библиотеку pydap для сбора данных THREDDS?

Я пытался использовать пример модуля get_nomads.py от Уилла Холгрена, который он был достаточно любезен, чтобы переслать мне. В коде есть вызов для получения данных THREDDS следующим образом:

from pydap.client import open_url
dataset = open_url('https://nomads.ncdc.noaa.gov/thredds/dodsC/gfs-004/201612/20161201/gfs_4_20161201_0000_003.grb2')

Что не работает, потому что (очевидно) старый сервер THREDDS был выведен из эксплуатации.

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2018.2.4\helpers\pydev\_pydevd_bundle\pydevd_exec2.py", line 3, in Exec
    exec(exp, global_vars, local_vars)
  File "<input>", line 1, in <module>
  File "C:\Users\pmoran\jira\slf\venv\lib\site-packages\pydap\client.py", line 64, in open_url
    dataset = DAPHandler(url, application, session, output_grid).dataset
  File "C:\Users\pmoran\jira\slf\venv\lib\site-packages\pydap\handlers\dap.py", line 51, in __init__
    raise_for_status(r)
  File "C:\Users\pmoran\jira\slf\venv\lib\site-packages\pydap\net.py", line 30, in raise_for_status
    comment=response.body
webob.exc.HTTPError: 404 Not Found

Поэтому я не могу найти сервер THREDDS, поддерживающий этот метод доступа к данным.

Кстати: я могу получить данные следующим образом:

url = 'http://dtvirt5.deltares.nl:8080/thredds/dodsC/opendap/rijkswaterstaat/jarkus/profiles/transect.nc'
dataset = open_url(url)
<DatasetType with children 'id', 'areacode', 'areaname', 'alongshore', 'cross_shore', 'time', 'time_bounds', 'epsg', 'x', 'y', 'lat', 'lon', 'angle', 'mean_high_water', 'mean_low_water', 'max_cross_shore_measurement', 'min_cross_shore_measurement', 'nsources', 'max_altitude_measurement', 'min_altitude_measurement', 'rsp_x', 'rsp_y', 'rsp_lat', 'rsp_lon', 'time_topo', 'time_bathy', 'origin', 'altitude'>
variable = dataset['id']
print(variable[0:10])
[2000100 2000101 2000102 2000103 2000104 2000105 2000106 2000120 2000140
 2000160]

Я также вижу, что могу вручную загрузить данные из https://www.ncei.noaa.gov/thredds/dodsC/gfs-g4-anl-files/201808/20180828/gfsanl_4_20180828_1800_006.grb2.html

Но я не могу найти формат аргумента для загрузки данных с помощью pydap. Я думаю, все, что мне нужно, это указатель на реальный сервер THREDDS, который имеет соответствующие файлы DDS и DAS в том же месте URI.

Кто-нибудь знает, как получить файлы GFS4 GRB с помощью клиента pydap?

Спасибо

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
522
2

Ответы 2

Не тестировал с использованием pydap, тестировал с использованием netCDF4, который очень хорошо работает с THREDDS. Это должно работать с использованием pydap.


dataset = open_url('http://www.ncei.noaa.gov/thredds/dodsC/gfs-g4-anl-files/201612/20161201/gfsanl_4_20161201_0000_003.grb2')

Форма THREDDS OPeNDAP для этого файла — здесь:.

Основной каталог, организованный ГГГГММ/, находится по адресу: https://www.ncei.noaa.gov/thredds/catalog/gfs-g4-anl-files/catalog.html
Все наборы данных NCEI GFS со ссылками на доступ к TDS можно увидеть здесь:
https://www.ncdc.noaa.gov/data-access/model-data/model-datasets/global-forcast-system-gfs

Должна быть ошибка pydap - pydap не работает с этой ссылкой: см. ниже. Однако NetCDF, похоже, работает:

P Moran 06.03.2019 16:48

Когда я пробую ссылку, которую вы предоставили Эрику с pydap, я получаю эту ошибку.

dataset = open_url('http://www.ncei.noaa.gov/thredds/dodsC/gfs-g4-anl-files/201612/20161201/gfsanl_4_20161201_0000_003.grb2')
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2018.2.4\helpers\pydev\_pydevd_bundle\pydevd_exec2.py", line 3, in Exec
    exec(exp, global_vars, local_vars)
  File "<input>", line 1, in <module>
  File "C:\Users\pmoran\jira\slf\venv\lib\site-packages\pydap\client.py", line 64, in open_url
    dataset = DAPHandler(url, application, session, output_grid).dataset
  File "C:\Users\pmoran\jira\slf\venv\lib\site-packages\pydap\handlers\dap.py", line 64, in __init__
    self.dataset = build_dataset(dds)
  File "C:\Users\pmoran\jira\slf\venv\lib\site-packages\pydap\parsers\dds.py", line 161, in build_dataset
    return DDSParser(dds).parse()
  File "C:\Users\pmoran\jira\slf\venv\lib\site-packages\pydap\parsers\dds.py", line 49, in parse
    self.consume('dataset')
  File "C:\Users\pmoran\jira\slf\venv\lib\site-packages\pydap\parsers\dds.py", line 41, in consume
    token = super(DDSParser, self).consume(regexp)
  File "C:\Users\pmoran\jira\slf\venv\lib\site-packages\pydap\parsers\__init__.py", line 182, in consume
    raise Exception("Unable to parse token: %s" % self.buffer[:10])
Exception: Unable to parse token: <!DOCTYPE 

Однако по вашему предложению я могу получить данные с помощью NETCDF4. Вот что я сделал.

>>> import netCDF4
>>> nc = netCDF4.Dataset('http://www.ncei.noaa.gov/thredds/dodsC/gfs-g4-anl-files/201612/20161201/gfsanl_4_20161201_0000_003.grb2')
>>> nc.variables.keys()
odict_keys(['LatLon_Projection', 'lat', 'lon', 'reftime', 'time', 'time_bounds', 
...  
'v-component_of_wind_altitude_above_msl', 'v-component_of_wind_height_above_ground', 'v-component_of_wind_tropopause', 'v-component_of_wind_sigma'])

Кажется, это работает. Не уверен, что не так с pydap.

Другие вопросы по теме