添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

关于xarray无法提取nc文件的变量数据,出现NetCDF: HDF error的解决方案

一、问题描述:

我在Anaconda Spyder中写入下述几行简单的代码,读取NC文件中的变量,运行成功;但是当我进一步提取变量信息时,却出现NetCDF: HDF error的报错。

#### 环境声明
# Windows 10
# Python 3.9.13
########################
# xarray version==0.17.0 
# netCDF4 version==1.5.8
# hdf5 version==1.10.6
import xarray as xr          # xarray version==0.17.0 
import netCDF4 as nc         # netCDF4 version==1.5.8
import hdf5
da = xr.open_dataset('F:/modis_chla.nc')    # 2003-2022 monthly资料
chl = da['chlor_a']          # chl[Time=300|Lon=960|Lat=1200]
# =========以下会报错
chl[0,:,:].plot()
# 甚至当我只想读出一个格点的数据时,也会出错
print (chl[0,0,0])
报错内容(部分)

二、网上查询解决方法

1. 文件路径问题

blog.csdn.net/kyzy_0018

文中提到文件的路径有中文字符,读取出现解析问题。

但事实上文件解析过程没有问题,变量 da chl 都可以print,只是数据无法提取。

2. netCDF4版本问题

blog.csdn.net/qq_393522

文中认为netCDF4版本有问题,将netCDF4 version==1.5.5.1降为netCDF4 version==1.4.0之后,问题得到了解决。

我并没有这样做,因为Python3.9无法兼容netCDF4 version==1.4.0,难以评定。

3. h5py包

github.com/Unidata/netc

文中提出解决方案,但是我没有成功,而且这种import顺序应该并没有任何影响

## 调换h5py和netCDF4 的import顺序
import h5py
import netCDF4

文中还提到可能的原因来自HDF5 c library,但没有解决方法。

4. HDF5的问题

likecs.com/ask-594179.h

文中认为是HDF5的版本问题,需要改变文件系统读写,代码如下

import os
os.HDF5_USE_FILE_LOCKING=FALSE

但是并无用处。。。


三、最根本的解决方案

在读取nc文件之后,不要急着读取变量信息,写入以下代码

import netCDF4 as nc
with nc.Dataset('F:/modis_chla.nc') as f:
    # chlor_a是f文件中的某个变量variables
    f['chlor_a'].set_collective(True)        # chl[Time=300|Lon=960|Lat=1200]

而且,不论是用xarray还是netCDF4去读取变量,碰到文中报错都可以写这两行代码,例如:

import netCDF4 as nc