Python netCDF4

  • read_nc.py
  • change_nc.py
  • nc2rgb.py

read_nc.py

from netCDF4 import Dataset
import numpy as npfile = 'file.nc'nc_obj=Dataset(file)#查看nc文件信息
print(nc_obj)
print(nc_obj.dimensions)
print('---------------------------------------')#查看每个变量的信息
for var_name in nc_obj.variables.keys():print(f'var name: {var_name}')var = nc_obj.variables[var_name]for arrt_name in var.ncattrs():print(f'arrt name: {arrt_name}, arrt value: {var.__dict__[arrt_name]}')print('')
print('---------------------------------------')#读取数据值
for var_name in nc_obj.variables.keys():var = nc_obj.variables[var_name]data = var[:]data = np.array(data)if '_FillValue' in var.__dict__:fillvalue = var.__dict__['_FillValue']data = np.where(data==fillvalue, data, np.nan)#data[data==fillValue] = np.nanif 'missing_value' in var.__dict__:missing_value = var.__dict__['missing_value']data = np.where(data==missing_value, data, np.nan)if 'valid_min' in var.__dict__:valid_min = var.__dict__['valid_min']data = np.where(data<valid_min, data, np.nan)#data[data<valid_min] = np.nanif 'valid_max' in var.__dict__:valid_max = var.__dict__['valid_max']data = np.where(data>valid_max, data, np.nan)if 'valid_range' in var.__dict__:valid_range = var.__dict__['valid_range']data = np.where(data<valid_range[0], data, np.nan)data = np.where(data>valid_range[1], data, np.nan)scale_factor = var.__dict__.get('scale_factor', 1.0) add_offset = var.__dict__.get('add_offset', 0.0)data =  data * scale_factor + add_offset#print(np.nanmax(data))#print(np.nanmin(data))print(data)print('')
print('---------------------------------------')

change_nc.py

from netCDF4 import DatasetncFile = 'test.nc'
dataset = Dataset(ncFile, 'r+')dataset.variables['lon'][0]=99.9
dataset.variables['chlor_a'][0, 0] =  99.9for key in dataset.variables.keys():print(dataset.variables[key])dataset.close()

nc2rgb.py

from netCDF4 import Dataset
from time import time
from PIL import Image, ImageDraw
import numpy as np
import mathdef getInd( sample, value ):number=len(sample)if value<=sample[0]:ind=0elif value>=sample[number-1]:ind=sample[number-1]else:i=1while value>sample[i]:i+=1ind=i-1 + (value-sample[i-1])/(sample[i]-sample[i-1])   return inddef getColor( color, ind ):number=len(color)if ind<=0:r, g, b = color[0]elif ind>=number-1:r, g, b = color[number-1]else:ind1 = math.floor(ind)ind2 = ind1+1r = round( color[ind1][0] * (ind2-ind) + color[ind2][0] * (ind-ind1) )g = round( color[ind1][1] * (ind2-ind) + color[ind2][1] * (ind-ind1) )b = round( color[ind1][2] * (ind2-ind) + color[ind2][2] * (ind-ind1) )return r, g, bstart = time()
print("Start: " + str(start))color =((147,0,108),(111,0,144 ),(72,0,183  ),(33,0,222  ),(0,10,255  ),(0,74,255  ),(0,144,255 ),(0,213,255 ),(0,255,215 ),(0,255,119 ),(0,255,15  ),(96,255,0  ),(200,255,0 ),(255,235,0 ),(255,183,0 ),(255,131,0 ),(255,79,0  ),(255,31,0  ),(230,0,0   ),(165,0,0   ),(105,0,0   ))sample=(0.0000,0.0471,0.0980,0.1490,0.2000,0.2471,0.2980,0.3490,0.4000,0.4471,0.4980,0.5490,0.6000,0.6471,0.6980,0.7490,0.8000,0.8471,0.8980,0.9490,1.0000)file = 'V2020214.L3m_DAY_JPSS1_CHL_chlor_a_9km.nc'dataSet=Dataset(file)chl=dataSet.variables['chlor_a']fillValue=chl._FillValue
validMin=chl.valid_min
validMax=chl.valid_maxdisplayMin=chl.display_min
displayMax=chl.display_maxdisplayScale=chl.display_scalechlValue=np.array(chl)tmp = chlValue.flatten()tmp[tmp==fillValue]=np.nan
tmp[tmp<validMin]=np.nan
tmp[tmp>validMax]=np.nannanInd = np.isnan(tmp)tmp[tmp<displayMin]=displayMin
tmp[tmp>displayMax]=displayMaxtmp[nanInd]=displayMinif displayScale=='log':tmp = (np.log(tmp)-np.log(displayMin))/(np.log(displayMax)-np.log(displayMin))
else:tmp = (tmp-displayMin)/(displayMax-displayMin)backColor=(0, 0, 0)
nanColor=(255, 255, 255)
width = 4320
height = 2160
image = Image.new('RGB', (width, height), backColor)draw = ImageDraw.Draw(image)for y in range(height):for x in range(width):value = x + width * yind = getInd( sample, tmp[value] )r, g, b = getColor( color, ind )if nanInd[value]:draw.point((x, y), fill=nanColor)else:draw.point((x, y), fill=(r, g, b))image.save('chl.png', 'png')stop = time()
print("Stop: " + str(stop))
print(str(stop-start) + "秒")

Python netCDF4相关推荐

  1. python 创建netcdf_如何用python netCDF4创建netCDF文件?

    我正在学习如何使用netCDF4使用Pyhton模块在水蟒.我试图将值附加到我创建的两个变量time和field:from netCDF4 import dataset import numpy as ...

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

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

  3. html显示hdf5文件,python读取hdf5文件

    python怎样读取hdf5文件 python 中h5py读文件,提示错误File "h5py\_objects完整代码和完整错误信息的图片. Windows环境下给Python安装h5py ...

  4. python把坐标写入文本_Python实现将数据写入netCDF4中的方法示例

    本文实例讲述了Python实现将数据写入netCDF4中的方法.分享给大家供大家参考,具体如下: nc文件为处理气象数据文件.用户可以去https://www.lfd.uci.edu/~gohlke/ ...

  5. WRF后处理/Python处理nc数据与可视化/极坐标网格绘制(Cartopy、netcdf4)——以北极雪水当量数据为例

    试了下用python处理并绘制北极雪水当量数据(来源:北极雪水当量格网数据集,,以往数据处理与图像绘制我习惯于使用matlab或R,绘制使用ArcGIS.不过python毕竟是万金油语言,试一试如何处 ...

  6. Anaconda下Python中h5py与netCDF4模块下载与安装方法

      本文介绍基于Anaconda,下载并安装Python中h5py与netCDF4这两个模块的方法.h5py与netCDF4这两个模块是与遥感图像处理.地学分析等GIS操作息息相关的模块,应用较为广泛 ...

  7. python中scale的用法_在netCDF4和Python中使用scale_factor和add_offset的示例?

    如果您想知道如何使用add_offset和scale_factor参数来打包或解包.nc文件中的数据,可以读取here. 使用python(download NCEP reanalysis I dat ...

  8. Python 使用netCDF4读写nc文件以及截取指定经纬度范围内的数据生成新的nc文件

    Python 使用netCDF4读写nc文件以及截取nc文件经纬度范围内的数据 简单介绍nc文件的读写操作,以及实现输入nc文件和坐标范围,输出一个新的nc文件的功能 环境 python3.8.13 ...

  9. Python安装及netcdf数据读写

    为什么80%的码农都做不了架构师?>>>    一.在CentOS7系统上安装Python3 在anaconda官网下载(http://https://www.anaconda.co ...

最新文章

  1. 北大燕博南:下一代AI芯片— 存内计算的硬核与软着陆 | 报告详解
  2. Runtime.getRuntime().exec
  3. 关于Ant与Maven(一)
  4. less入门及基础学习(建议有css基础)
  5. mysql语句解析_mysql 语句的查询过程解析
  6. WORD开发工具的控件功能?
  7. php apache很慢,Apache 服务器 首次访问特别慢的解决过程,php环境
  8. mysql procedure
  9. ubuntu手机识别
  10. 2018北京ICPC D. Frog and Portal(构造)
  11. 人脸对齐(三)--AAM算法
  12. 学习vb6.0视频教程网址
  13. matlab求常微分方程组,matlab常微分方程组求解
  14. 单片机实验四 矩阵键盘实验
  15. 笔记——衡量回归算法的标准最好的评价指标R Square
  16. allegro 移动元件时飞线隐藏或者拖动元件时飞线不显示?
  17. 大学计算机基础实验指导word,大学计算机基础实验指导全套.doc
  18. 决策树之五:连续变量计算过程
  19. LeetCode 24.两两交换链表中的节点 C语言
  20. 华东师范计算机模拟考试题答案,《计算机入门》模拟卷C答案-华东师范大学

热门文章

  1. openstack中 Server Error for url: http://controller:9696/v2.0/agents, Internal Server Error
  2. 【2019 NWERC - E】Expeditious Cubing 【★】
  3. 基于WIFI信号的呼吸和心率检测(论文总结)
  4. 【课程学习】(中国大学MOOC)武汉理工大学高级人工智能原理与技术课后习题笔记(1-5章)
  5. 【中英双语】C 语言的历史
  6. 雪球python爬虫炒股_如何使用 Python 抓取雪球网页?
  7. 本地搭建乌云漏洞平台
  8. pikachu XXE (XML外部实体注入)(皮卡丘漏洞平台通关系列)
  9. Reporting Services 配置工具
  10. tomcat启动后无法访问到8080页面的原因