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

时间:2018-03-16 10:04:17

标签: hdf5 netcdf h5py netcdf4

打开netcdf文件时出现此错误。 代码之前正在运行。 如何解决此问题?

  

追踪(最近一次呼叫最后一次):

     

文件"",第1行,in       ...

     

文件" file.py",第71行,在gather_vgt中       return xr.open_dataset(filename)

     

File" /.../ lib / python3.6 / site-packages / xarray / backends / api.py",line   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行,in   netCDF4._netCDF4.Dataset。的初始化

     

文件" 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,错误消息=' ...')

2 个答案:

答案 0 :(得分:4)

你必须处于这种情况:

  • 您的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可以设置为五个字符的字符串
        ' FALSE&#39 ;.这并没有从根本上改变HDF5库   操作(除了初始文件打开/创建,SWMR是无锁的),
  但是用户必须更加小心打开文件   避免有问题的访问模式(即:多个编写者)>文件锁定被设计为防止。

     

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

     

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

答案 1 :(得分:1)

对于我来说,@ Florian建议的解决方案不起作用。我找到了另一种解决方案,建议导入h5pynetCDF4的顺序很重要(请参阅here)。

事实上,以下对我有用:

from netCDF4 import Dataset
import h5py

如订单所述,切换订单会导致错误。