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

Posted

技术标签:

【中文标题】\[Errno -101\] NetCDF:打开 netcdf 文件时出现 HDF 错误【英文标题】:\[Errno -101\] NetCDF: HDF error when opening netcdf file 【发布时间】:2018-08-25 08:30:36 【问题描述】:

打开我的 netcdf 文件时出现此错误。 该代码以前可以工作。 我该如何解决这个问题?

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在 ...

gather_vgt 中的文件“file.py”,第 71 行 返回 xr.open_dataset(文件名)

文件“/.../lib/python3.6/site-packages/xarray/backends/api.py”,行 286,在 open_dataset 中 自动关闭=自动关闭)

文件 "/.../lib/python3.6/site-packages/xarray/backends/netCDF4_.py", 第 275 行,开放 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'

当我尝试使用 h5py 打开同一个 netcdf 文件时,我收到此错误:

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

【问题讨论】:

【参考方案1】:

你一定是这种情况:

您的 HDF5 库已更新 (1.10.1)(netcdf 在后台使用 HDF5)

您的文件系统不支持 HDF5 库使用的文件锁定。

为了读取你的 hdf5 或 netcdf 文件,你需要设置这个environment variable:

 HDF5_USE_FILE_LOCKING=FALSE

供参考,这是在HDF5 version 1.10.1中引入的,

添加了禁用 SWMR 文件锁定方案的机制。

HDF5 1.10.0(包括patch1)中使用的文件锁定调用 当底层文件系统不支持文件时会失败 锁定或锁定已被禁用的地方。禁用所有文件 锁定操作,一个名为的环境变量 HDF5_USE_FILE_LOCKING 可以设置为五个字符的字符串 '错误的'。这不会从根本上改变 HDF5 库 操作(除了初始文件打开/创建,SWMR 是无锁的), 但用户在打开文件时必须更加小心 避免有问题的访问模式(即:多个写入者)>文件锁定旨在防止。

另外,文件锁定时发出的错误消息 操作将 errno 设置为 ENOSYS(文件锁定时的典型情况 已禁用)已更新以描述问题和潜在问题 分辨率更好。

(DER,2016/10/26,HDFFV-9918)

【讨论】:

非常感谢!救我的命。就我而言,我需要导出 HDF5_USE_FILE_LOCKING=FALSE 因为我在 Jupyter 笔记本中打开了 netcdf 文件。在我使用 Jupyter notebook 之前需要导出到环境中。我也在.bashrc中添加了这个命令,所以它会自动执行它。【参考方案2】:

就我而言,@Florian 建议的解决方案不起作用。我找到了另一个解决方案,它表明h5pynetCDF4 的导入顺序很重要(参见here)。

事实上,以下内容对我有用:

from netCDF4 import Dataset
import h5py

切换顺序会导致 OP 描述的错误。

【讨论】:

以上是关于[Errno -101] NetCDF:打开 netcdf 文件时出现 HDF 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 shapefile 屏蔽 NetCDF 并计算 shapefile 中所有多边形的平均值和异常值

gis创建netcdf中x维度怎么填

提取 ncview 工具中存在的值...使用 ruby​​-netcdf

访问 netcdf 文件中嵌套组中的变量(文件格式 HDF5)

从文件对象或 netCDF4 数据集创建 Iris Cube

224?? IDL NetCDF 文件操作说明