使用python的netCDF4库读取.nc文件 和 创建.nc文件

使用python的netCDF4库读取.nc文件 和 创建.nc文件使用 pythonnetCDF 库读取 nc 文件和创建 nc 文件 1 介绍 nc networkCommo 文件是气象上常用的数据格式 python 上读取 nc 使用较多的库为 netCDF4 这个库 下面将介绍这个库的具体方法 安装很简单 pipinstallne nc 文件介绍参考链接 https blog csdn net wildand

使用python netCDF4库读取.nc文件 和 创建.nc文件

1. 介绍
.nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用较多的库为netCDF4这个库,下面将介绍这个库的具体方法。

安装很简单:

pip install netCDF4 

.nc文件介绍参考链接:https://blog.csdn.net/wildand/article/details/

2. .nc文件的读取

#导入nc库 import netCDF4 as nc filename = '2017-06-15_2017-06-17.nc' # .nc文件名 f = nc.Dataset(filename) #读取.nc文件,传入f中。此时f包含了该.nc文件的全部信息 

#step1: 查看.nc文件的全部变量,及该变量的全部信息(维度大小,单位等)

all_vars = f.variables.keys() #获取所有变量名称 print(len(all_vars)) #长度为18 all_vars_info = f.variables.items() #获取所有变量信息 print(type(all_vars_info)) #输出为: odict_items 。这里将其转化为 list列表 print(len(all_vars_info)) #长度为18 all_vars_info = list(all_vars_info) #此时每个变量的信息为其中一个列表 
#我们要查看 ’u‘的信息 var = 'u' var_info = f.variables[var] #获取变量信息 var_data = f[var][:] #获取变量的数据 print(var_info) print(var_data.shape) #很方便转化为array数组 print(type(var_data)) # 
  
    .nc文件的变量数组都为Masked array var_data = np.array(var_data) #转化为np.array数组 
  
最直接的办法,获取每个变量的缩写名字,标准名字(long_name),units和shape大小。这样很方便后续操作 all_vars_name = [] all_vars_long_name = [] all_vars_units = [] all_vars_shape = [] for key in f1.variables.keys(): all_vars_name.append(key) all_vars_long_name.append(f1.variables[key].long_name) all_vars_units.append(f1.variables[key].units) all_vars_shape.append(f1.variables[key].shape) 
#做成表格 a_vars_info = pd.DataFrame(all_vars_name,columns = ['name']) a_vars_info['long_name'] = all_vars_long_name a_vars_info['units'] = all_vars_units a_vars_info['shape'] = all_vars_shape 

在这里插入图片描述

注意:完成上述操作之后,记得关掉该文件

f.close() #关闭文件。如果文件关闭后,再使用f.variabels.items()等操作是行不通的。 

3. nc文件的创建

#step1: 创建一个文件

f_w = nc.Dataset('hecheng.nc','w',format = 'NETCDF4') #创建一个格式为.nc的,名字为 ‘hecheng.nc’的文件 

#step2: 写入一些基本的信息

.nc文件的里面的每个变量都有维度信息,比如,上面的 var=‘u’,维度为 1237161*177。这里面的各个维度,并不是随便定义的,是与基础的变量信息相关的。
如[12,37,161,177] = [time,level,latitude,longitude],第一个维度为时间信息,依次为 垂直层信息,纬度、经度信息。
所以,我们要先写入一些基本的信息:时间,垂直层,纬度,经度




#time纬度为12。注意,第2个参数 表示维度,但是必须是 integer整型,也就是只能创建一个基础单一维度信息。 #如果后面要创建一个变量维度>1,则必须由前面的单一维度组合而来。后面会介绍。 #确定基础变量的维度信息。相对与坐标系的各个轴(x,y,z) f_w.createDimension('time',12) f_w.createDimension('level',37) f_w.createDimension('lat',161) f_w.createDimension('lon',177) 创建变量。参数依次为:‘变量名称’,‘数据类型’,‘基础维度信息’ f_w.createVariable('time',np.int,('time')) f_w.createVariable('level',np.int,('level')) f_w.createVariable('lat',np.float32,('lat')) f_w.createVariable('lon',np.float32,('lon')) #写入变量time的数据。维度必须与定义的一致。 time = np.array([0,6,12,18,0,6,12,18,0,6,12,18]) f_w.variables['time'][:] = time #新创建一个多维度变量,并写入数据, f_w.createVariable( 'u', np.float32, ('time','level','lat','lon')) var_data = np.ones(shape=(12,37,161,177), dtype = np.float32) f_w.variables[var][:] = var_data 

关闭文件

f_w.close() 

#step3: 创建群组

f_w = nc.Dataset('haha4.nc','w',format = 'NETCDF4') f_w.createDimension('time',12) f_w.createDimension('level',37) f_w.createDimension('lat',161) f_w.createDimension('lon',177) f_w.createVariable('time',np.int,('time')) f_w.createVariable('level',np.int,('level')) f_w.createVariable('lat',np.float32,('lat')) f_w.createVariable('lon',np.float32,('lon')) time = np.array([0,6,12,18,0,6,12,18,0,6,12,18]) f_w.variables['time'][:] = time f_w.variables['level'][:] = level f_w.createVariable( 'q', np.float32, ('time','level','lat','lon')) var_data = np.ones(shape=(12,37,161,177), dtype = np.float32) f_w.variables['q'][:] = var_data #创建一个群组,名字为'wind' group1 = f_w.createGroup('wind') group1.createVariable( 'u', np.float32, ('time','level','lat','lon')) var_data = np.ones(shape=(12,37,161,177), dtype = np.float32) group1.variables['u'][:] = var_data group1.createVariable( 'v', np.float32, ('time','level','lat','lon')) var_data = np.zeros(shape=(12,37,161,177), dtype = np.float32) group1.variables['v'][:] = var_data group1.close # 关闭群组, 注意,这里没有括号 f_w.close() 

#step4:查看带有group的.nc文件的信息

f1 = nc.Dataset('haha5.nc') vars = f1.variables.keys() #odict_keys(['time', 'level', 'lat', 'lon', 'q']) 看不到groups信息 #通过以下命令 group_name = f1.groups.keys() #获取组名,输出为:odict_keys(['wind']) 
#获取group内的变量的数据 group_var_data = f1['wind']['u'][:] print(group_var_data.shape) #(12, 37, 161, 177) 

4. 总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225405.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:24
下一篇 2026年3月17日 上午9:24


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号