使用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文件相关推荐

  1. python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]

    使用python netCDF4库读取.nc文件 和 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用 ...

  2. pandas读取csv写入mysql_使用python的pandas库读取csv文件保存至mysql数据库

    第一:pandas.read_csv读取本地csv文件为数据框形式 data=pd.read_csv('G:\data_operation\python_book\chapter5\\sales.cs ...

  3. Python用pydicom库读取dicom文件

    Python用pydicom库读取dicom文件并调用 方法1:通过group.element读取 方法2:通过tag读取 方法3:get()方法 通用 import pydicompath = 'x ...

  4. oracle 创建日志文件,oracle创建日志文件

    一团网资讯 一团资讯 > oracle > oracle创建日志文件 oracle创建日志文件 2018-04-14 15:39:48     发布者:来源网络 创建日志文件的语法如下: ...

  5. hadoop HDFS的文件夹创建、文件上传、文件下载、文件夹删除,文件更名、文件详细信息、文件类型判断(文件夹或者文件)

    摘要: 本篇文章主要介绍的是hadoop hdfs的基础api的使用.包括Windows端依赖配置,Maven依赖配置.最后就是进行实际的操作,包括:获取远程hadoop hdfs连接,并对其进行的一 ...

  6. Python使用pm4py库读取xes文件

    pm4py官方文档:PM4Py - Process Mining for PythonPM4Py is a process mining package for Python. PM4Py imple ...

  7. Python科学计算:读取txt,csv,mat文件

    一.txt文件 txt文件是非常常见的文本文件了,我们能够把一些数据保存在txt文件里面,然后读取出来. 没有例子讲的话很麻烦,所以这里结合例子给出背景来讲怎么方便的载入.txt文件到一个数组. 首先 ...

  8. Python 的xlrd库读取日期和数字时输出显示不正确问题解决

    这里是要读取的数据,有数字和日期,用xlrd库读取的时候会发现,数字后面多了个".0",读取的日期变成了时间戳 def get_sheet1_data(excelDir, shee ...

  9. python读xml文件生成.h头文件_Python创建xml文件示例

    Python创建xml文件示例 这里有新鲜出炉的 Python 入门,程序狗速度看过来! Python 编程语言 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido van Ros ...

  10. python学习(二) ElementTree解析、读写、创建xml文件

    python学习(二) 读写xml文件 1.xml格式 将其存储为sample.xml  Tag:使用<>包围的部分  Element:被Tag包围的部分,例如22中的22  Attrib ...

最新文章

  1. linux 节点信,DOM 节点信息
  2. 人脸识别软件正在学习识别熊脸和牛脸
  3. mac电脑Git提交代码到Github提示git-credential-osxkeychain 验证解决方案
  4. python 协程_Python 协程与 Go 协程的区别(一)
  5. python 办公自动化-用python进行办公自动化都需要学习什么知识呢?
  6. U3D MonoBehaviour
  7. opencv 人脸识别_人工智能-OpenCV+Python实现人脸识别(视频人脸检测)
  8. python 月活_TikTok用户月活超1亿意味着什么?什么是月活用户?
  9. C、C++函数集 说明
  10. 【 如何将.vue文件中的所有css代码放入一个.css文件中】
  11. cacti的安装和配置
  12. dubbo升级spring4与cxf
  13. 帕斯卡计算机的控制原理,液体静力学基本方程式和帕斯卡原理
  14. 重要的xcel文件e报表丢了如何恢复呢
  15. UNIX网络编程学习笔记(Racoon)
  16. 2020年8月程序员工资统计,平均14401元,下跌势头止住了
  17. 视觉SLAM十四讲——第四讲李群与李代数
  18. c#WinForm使用OpencvSharp4实现简易抓边
  19. Java入门必背100条
  20. 变频电源是否要加功率补偿器?为什么?

热门文章

  1. Linux自学之旅-安装篇(设备文件名)
  2. solidity教程(三)高级 Solidity 理论
  3. Cesium 高性能扩展之DrawCommand(二):OSGB倾斜模型展示应用
  4. 分享活动报名收费的微信小程序制作功能介绍_瑜伽健身房培训报名小程序开发介绍
  5. jQuery WeUI日历calendar时间段(开始日期默认选中日期是今天,结束日期设置最小日期),显示日期格式是yyyy年mm月dd日
  6. 便捷、高效、智能—从运维视角看星环科技大数据基础平台TDH
  7. 局域网在线计算机扫描仪,局域网内也共享扫描仪
  8. 修改Android动画速度
  9. 《word精彩实例互动教程》已经上线!
  10. 移动端前端开发技术概况