使用python的netCDF4库读取.nc文件 和 创建.nc文件
使用python netCDF4库读取.nc文件 和 创建.nc文件
1. 介绍
.nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用较多的库为netCDF4这个库,下面将介绍这个库的具体方法。
安装很简单:
pip install netCDF4
.nc文件介绍参考链接:https://blog.csdn.net/wildand/article/details/88899718
2. .nc文件的读取
#导入nc库
import netCDF4 as ncfilename = '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)) #长度为18all_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) #此时每个变量的信息为其中一个列表
如图:包含经纬度、时间、等变量名称
看看 all_vars_info的前两个变量的信息,如下,显示了 shape unit name float32 fillvalue等信息
#step2: 查看.nc文件的单个变量,及该变量的全部信息(维度大小,单位等)
如果对某个变量感兴趣(已知变量名),想查看这个变量的信息,获取这个变量的数据,方法如下:
#我们要查看 ’u‘的信息
var = 'u'
var_info = f.variables[var] #获取变量信息
var_data = f[var][:] #获取变量的数据
print(var_info)
print(var_data.shape) #很方便转化为array数组
print(type(var_data)) #<class 'numpy.ma.core.MaskedArray'> .nc文件的变量数组都为Masked array
var_data = np.array(var_data) #转化为np.array数组
输出如下:
#step3: 列表形式记录所有变量信息
###最直接的办法,获取每个变量的缩写名字,标准名字(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()
还可以写入fill_value等信息
按照上述方式创建完成后,用一些可视化软件打开,结果如上图。
#step3: 创建群组
如上图,所以变量都是平行的位置,如果变量特别多,将相同类型的变量放进同一个group中,会更加方便。
来看一个示例:
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'][:] = levelf_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()
创建结果如下:
看,group的信息出来了
**#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内的变量的数据
group_var_data = f1['wind']['u'][:]
print(group_var_data.shape) #(12, 37, 161, 177)
4. 总结
气象上常用除了.nc文件外,还有 hdf文件,这两者格式都差不多,但是我更爱.hdf格式文件
后面有机会再介绍.hdf文件的读写操作。
使用python的netCDF4库读取.nc文件 和 创建.nc文件相关推荐
- python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]
使用python netCDF4库读取.nc文件 和 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用 ...
- pandas读取csv写入mysql_使用python的pandas库读取csv文件保存至mysql数据库
第一:pandas.read_csv读取本地csv文件为数据框形式 data=pd.read_csv('G:\data_operation\python_book\chapter5\\sales.cs ...
- Python用pydicom库读取dicom文件
Python用pydicom库读取dicom文件并调用 方法1:通过group.element读取 方法2:通过tag读取 方法3:get()方法 通用 import pydicompath = 'x ...
- oracle 创建日志文件,oracle创建日志文件
一团网资讯 一团资讯 > oracle > oracle创建日志文件 oracle创建日志文件 2018-04-14 15:39:48 发布者:来源网络 创建日志文件的语法如下: ...
- hadoop HDFS的文件夹创建、文件上传、文件下载、文件夹删除,文件更名、文件详细信息、文件类型判断(文件夹或者文件)
摘要: 本篇文章主要介绍的是hadoop hdfs的基础api的使用.包括Windows端依赖配置,Maven依赖配置.最后就是进行实际的操作,包括:获取远程hadoop hdfs连接,并对其进行的一 ...
- Python使用pm4py库读取xes文件
pm4py官方文档:PM4Py - Process Mining for PythonPM4Py is a process mining package for Python. PM4Py imple ...
- Python科学计算:读取txt,csv,mat文件
一.txt文件 txt文件是非常常见的文本文件了,我们能够把一些数据保存在txt文件里面,然后读取出来. 没有例子讲的话很麻烦,所以这里结合例子给出背景来讲怎么方便的载入.txt文件到一个数组. 首先 ...
- Python 的xlrd库读取日期和数字时输出显示不正确问题解决
这里是要读取的数据,有数字和日期,用xlrd库读取的时候会发现,数字后面多了个".0",读取的日期变成了时间戳 def get_sheet1_data(excelDir, shee ...
- python读xml文件生成.h头文件_Python创建xml文件示例
Python创建xml文件示例 这里有新鲜出炉的 Python 入门,程序狗速度看过来! Python 编程语言 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido van Ros ...
- python学习(二) ElementTree解析、读写、创建xml文件
python学习(二) 读写xml文件 1.xml格式 将其存储为sample.xml Tag:使用<>包围的部分 Element:被Tag包围的部分,例如22中的22 Attrib ...
最新文章
- linux 节点信,DOM 节点信息
- 人脸识别软件正在学习识别熊脸和牛脸
- mac电脑Git提交代码到Github提示git-credential-osxkeychain 验证解决方案
- python 协程_Python 协程与 Go 协程的区别(一)
- python 办公自动化-用python进行办公自动化都需要学习什么知识呢?
- U3D MonoBehaviour
- opencv 人脸识别_人工智能-OpenCV+Python实现人脸识别(视频人脸检测)
- python 月活_TikTok用户月活超1亿意味着什么?什么是月活用户?
- C、C++函数集 说明
- 【 如何将.vue文件中的所有css代码放入一个.css文件中】
- cacti的安装和配置
- dubbo升级spring4与cxf
- 帕斯卡计算机的控制原理,液体静力学基本方程式和帕斯卡原理
- 重要的xcel文件e报表丢了如何恢复呢
- UNIX网络编程学习笔记(Racoon)
- 2020年8月程序员工资统计,平均14401元,下跌势头止住了
- 视觉SLAM十四讲——第四讲李群与李代数
- c#WinForm使用OpencvSharp4实现简易抓边
- Java入门必背100条
- 变频电源是否要加功率补偿器?为什么?
热门文章
- Linux自学之旅-安装篇(设备文件名)
- solidity教程(三)高级 Solidity 理论
- Cesium 高性能扩展之DrawCommand(二):OSGB倾斜模型展示应用
- 分享活动报名收费的微信小程序制作功能介绍_瑜伽健身房培训报名小程序开发介绍
- jQuery WeUI日历calendar时间段(开始日期默认选中日期是今天,结束日期设置最小日期),显示日期格式是yyyy年mm月dd日
- 便捷、高效、智能—从运维视角看星环科技大数据基础平台TDH
- 局域网在线计算机扫描仪,局域网内也共享扫描仪
- 修改Android动画速度
- 《word精彩实例互动教程》已经上线!
- 移动端前端开发技术概况