python的netCDF4批量处理NC格式文件的操作方法


Posted in Python onMarch 21, 2022

一、使用ArcMap提取出第一期数据

1.使用工具箱中的“Make NetCDF Raster Layer”工具,提取出一个数据

python的netCDF4批量处理NC格式文件的操作方法

可以发现该数据有正确的像元大小、坐标系等

python的netCDF4批量处理NC格式文件的操作方法

python的netCDF4批量处理NC格式文件的操作方法

2.导出该数据作为标准数据

python的netCDF4批量处理NC格式文件的操作方法

二、使用python批量提取所有数据

1. 查看数据属性

from netCDF4 import Dataset,num2date
infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc"
data_set = Dataset(infile) # 读取nc文件信息
print(data_set)

输出为

<class 'netCDF4._netCDF4.Dataset'>
root group (NETCDF3_CLASSIC data model, file format NETCDF3):
    title: GRUN
    version: GRUN 1.0
    meteorological_forcing: GSWP3
    temporal_resolution: monthly
    spatial_resolution: 0.5x0.5
    crs: WGS84
    proj4: +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
    EPSG: 4326
    references: Ghiggi et al.,2019. GRUN: An observation-based global gridded runoff dataset from 1902 to 2014. ESSD, doi: https://doi.org/10.5194/essd-2019-32
    authors: Gionata Ghiggi; Lukas Gudmundsson
    contacts: gionata.ghiggi@gmail.com; lukas.gudmundsson@env.ethz.ch
    institution: Land-Climate Dynamics, Institute for Atmospheric and Climate Science, ETH Zürich
    institution_id: IAC ETHZ
    dimensions(sizes): X(720), Y(360), time(1356)
    variables(dimensions): float64 X(X), float64 Y(Y), float64 time(time), float32 Runoff(time, Y, X)
    groups: 

可以看到variables变量X、Y为经纬度,time为时间,Runoff为需要的结果

2.批量导出结果

from osgeo import gdal
from netCDF4 import Dataset,num2date
import numpy as np

def WriteTiff(im_data,inputdir, path):
    raster = gdal.Open(inputdir)
    im_width = raster.RasterXSize #栅格矩阵的列数
    im_height = raster.RasterYSize #栅格矩阵的行数
    im_bands = raster.RasterCount #波段数
    im_geotrans = raster.GetGeoTransform()#获取仿射矩阵信息
    im_proj = raster.GetProjection()#获取投影信息
    
    if 'int8' in im_data.dtype.name:
        datatype = gdal.GDT_Byte
    elif 'int16' in im_data.dtype.name:
        datatype = gdal.GDT_UInt16
    else:
        datatype = gdal.GDT_Float32
    if len(im_data.shape) == 3:
        im_bands, im_height, im_width = im_data.shape
    elif len(im_data.shape) == 2:
        im_data = np.array([im_data])
        im_bands, (im_height, im_width) = 1, im_data.shape
        # 创建文件
    driver = gdal.GetDriverByName("GTiff")
    dataset = driver.Create(path, im_width, im_height, im_bands, datatype)
    if (dataset != None):
        dataset.SetGeoTransform(im_geotrans)  # 写入仿射变换参数
        dataset.SetProjection(im_proj)  # 写入投影
    for i in range(im_bands):
        dataset.GetRasterBand(i + 1).WriteArray(im_data[i])
    del dataset
infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc"
data_set = Dataset(infile) # 读取nc文件信息
time = data_set.variables["time"][:]  # 获取时间一列
units = data_set.variables["time"].units # 获取第一期时间
#读取样本tif文件的地理信息
intif = "../03ProcessData/runoff_example.tif"
for i in range(0,len(time)):
    yr = num2date(time[i],units).year # 提取年份
    mon = num2date(time[i],units).month    # 提取月份
    value_data = data_set.variables['Runoff'][i]
    # 将缺失值改为0
    data = value_data.data
    mask = value_data.mask
    data[np.where(mask == True)] = 0
    outputname = "../01Data/Runoff1992-2014/tif/" + str(yr) + str(mon).zfill(2) + ".tif"
    WriteTiff(data,intif , outputname)
    print(outputname)

!注意事项

1.使用时候请自行修改修改输入输出文件路径与变量名称

2.根据需要处理缺失值

到此这篇关于python的netCDF4批量处理NC格式文件的操作方法的文章就介绍到这了,更多相关python netCDF4处理NC格式文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
python中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
python奇偶行分开存储实现代码
Mar 19 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
python自动保存百度盘资源到百度盘中的实例代码
Aug 26 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
使用Python实现Wake On Lan远程开机功能
Jan 22 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
python标准库OS模块函数列表与实例全解
Mar 10 Python
通过实例简单了解python yield使用方法
Aug 06 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
Python&Matlab实现灰狼优化算法的示例代码
Python学习之时间包使用教程详解
Mar 21 #Python
Python数据结构之队列详解
Python学习之os包使用教程详解
分享几种python 变量合并方法
Mar 20 #Python
python 使用tkinter与messagebox写界面和弹窗
Mar 20 #Python
python中的sys模块和os模块
Mar 20 #Python
You might like
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
js计数器代码
2006/11/04 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
Python列表推导式的使用方法
2013/11/21 Python
Python回调函数用法实例详解
2015/07/02 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
财务负责人任命书
2014/06/06 职场文书
大学辅导员述职报告
2015/01/10 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
php png失真的原因及解决办法
2021/11/17 PHP