[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 建议的解决方案不起作用。我找到了另一个解决方案,它表明h5py
和netCDF4
的导入顺序很重要(参见here)。
事实上,以下内容对我有用:
from netCDF4 import Dataset
import h5py
切换顺序会导致 OP 描述的错误。
【讨论】:
以上是关于[Errno -101] NetCDF:打开 netcdf 文件时出现 HDF 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 shapefile 屏蔽 NetCDF 并计算 shapefile 中所有多边形的平均值和异常值
提取 ncview 工具中存在的值...使用 ruby-netcdf
访问 netcdf 文件中嵌套组中的变量(文件格式 HDF5)