\ [Errno -101 \] NetCDF: ошибка HDF при открытии файла netcdf

У меня возникает эта ошибка при открытии файла netcdf. Код раньше работал. Как это исправить?

Отслеживание (последний вызов последний):

Файл "", строка 1, в ...

Файл "file.py", строка 71, в gather_vgt возвращает xr.open_dataset (имя файла)

Файл "/.../lib/python3.6/site-packages/xarray/backends/api.py", строка 286, в open_dataset autoclose = autoclose)

Файл "/.../lib/python3.6/site-packages/xarray/backends/netCDF4_.py", строка 275, в open ds = opener ()

Файл "/.../lib/python3.6/site-packages/xarray/backends/netCDF4_.py", строка 199, в _open_netcdf4_group ds = nc4.Dataset (filename, mode = mode, ** kwargs)

Файл netCDF4 / _netCDF4.pyx, строка 2015, в netCDF4._netCDF4.Dataset. init

Файл netCDF4 / _netCDF4.pyx, строка 1636, в netCDF4._netCDF4._ensure_nc_success

OSError: [Errno -101] NetCDF: ошибка HDF: b'file.nc '

Когда я пытаюсь открыть тот же файл netcdf с помощью h5py, я получаю эту ошибку:

OSError: невозможно открыть файл (блокировка файлов отключена в этой файловой системе (используйте для переопределения переменную среды HDF5_USE_FILE_LOCKING), errno = 38, сообщение об ошибке = '...')


person Florian    schedule 16.03.2018    source источник


Ответы (2)


Вы должны быть в такой ситуации:

  • ваша библиотека HDF5 обновлена ​​(1.10.1) (netcdf использует HDF5 под капотом)

  • ваша файловая система не поддерживает блокировку файлов, которую использует библиотека HDF5.

Чтобы читать файлы hdf5 или netcdf, вам необходимо установить эту переменную среды:

 HDF5_USE_FILE_LOCKING=FALSE

Для справки это было введено в HDF5 версии 1.10.1,

Добавлен механизм отключения схемы блокировки файлов SWMR.

Вызовы блокировки файлов, используемые в HDF5 1.10.0 (включая patch1)
завершатся ошибкой, если соответствующая файловая система не поддерживает блокировку файлов или если блокировки отключены. Чтобы отключить все операции блокировки
файла, переменная среды с именем
HDF5_USE_FILE_LOCKING может быть установлена ​​в строку из пяти символов
'FALSE'. Это принципиально не меняет работу библиотеки HDF5
(кроме начального открытия / создания файла, SWMR не блокируется),
но пользователям придется быть более осторожными при открытии файлов
во избежание проблемных шаблонов доступа ( то есть: несколько писателей)> что блокировка файла была разработана для предотвращения.

Кроме того, сообщение об ошибке, которое выдается, когда блокировка файла
операциями устанавливает для errno значение ENOSYS (обычно, когда блокировка файла была
отключена), было обновлено, чтобы лучше описать проблему и возможное ее решение.

(DER, 26.10.2016, HDFFV-9918)

person Florian    schedule 16.03.2018
comment
Большое спасибо! спаси мою жизнь. В моем случае мне нужно экспортировать HDF5_USE_FILE_LOCKING = FALSE, потому что я открываю файл netcdf в записной книжке Jupyter. необходимо выполнить экспорт в среду, прежде чем я буду использовать записную книжку Jupyter. Я также добавил эту команду в .bashrc, чтобы она выполнялась автоматически. - person music_piano; 24.08.2020

В моем случае решение, предложенное @Florian, не сработало. Я нашел другое решение, в котором говорилось, что порядок, в котором импортируются h5py и netCDF4, имеет значение (см. здесь).

И, действительно, у меня работает следующее:

from netCDF4 import Dataset
import h5py

Изменение порядка приводит к ошибке, как описано OP.

person Alf    schedule 02.07.2020