[Errno -101] NetCDF:打开netcdf文件时的HDF错误

6

打开netcdf文件时出现错误,之前的代码是正常的。 我该如何解决这个问题?

Traceback (most recent call last):

File "", line 1, in ...

File "file.py", line 71, in gather_vgt return xr.open_dataset(filename)

File "/.../lib/python3.6/site-packages/xarray/backends/api.py", line 286, in open_dataset autoclose=autoclose)

File "/.../lib/python3.6/site-packages/xarray/backends/netCDF4_.py", line 275, in open ds = opener()

File "/.../lib/python3.6/site-packages/xarray/backends/netCDF4_.py", line 199, in _open_netcdf4_group ds = nc4.Dataset(filename, mode=mode, **kwargs)

File "netCDF4/_netCDF4.pyx", line 2015, in netCDF4._netCDF4.Dataset.init

File "netCDF4/_netCDF4.pyx", line 1636, in netCDF4._netCDF4._ensure_nc_success

OSError: [Errno -101] NetCDF: HDF error: b'file.nc'

当我尝试使用h5py打开相同的netcdf文件时,会出现以下错误:

OSError: 无法打开文件(此文件系统已禁用文件锁定(使用HDF5_USE_FILE_LOCKING环境变量覆盖),errno = 38,错误消息 = '...')

2个回答

16

您可能遇到了以下情况:

  • 您的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,2016/10/26,HDFFV-9918)



非常感谢!救了我的命。 在我的情况下,我需要执行以下操作: export HDF5_USE_FILE_LOCKING=FALSE因为我在Jupyter notebook中打开netcdf文件。需要在使用Jupyter notebook之前将其导出到环境中。 我还将此命令添加到.bashrc中,这样它就会自动执行。 - music_piano

4
在我的情况下,@Florian建议的解决方案没有起作用。我找到了另一个解决方案,建议按照导入h5pynetCDF4的顺序(请参见此处)。实际上,以下方法适用于我:
from netCDF4 import Dataset
import h5py

交换顺序会导致OP描述的错误发生。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接