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. 网站内部优化的4个细节小技巧
  2. Entity Framework 学习中级篇3—存储过程(中)
  3. 洛谷 2777 [AHOI2016初中组]自行车比赛
  4. Java集合(四):Map映射
  5. 数组元素的地址计算问题(一维到高维)
  6. 面试了57位高级产品经理,我发现混得好的人都有这个特质!
  7. 搭建Windows server 2008 R2 KMS
  8. 【caffe-windows】 caffe-master 之图片转换成lmdb or leveldb
  9. hl3150cdn打印不了照片_如何在美国打印证件照片 (Passport Photos)?
  10. java泛型范围_Java泛型范围
  11. 3-13 图片几何变换小结
  12. Matlab括号使用详解
  13. 线程7种状态的相互转换
  14. 【论文笔记】基于2-channel network的图片相似度判别-CVPR 2015
  15. nokia n9 android 4.4,NOKIA N9获APK兼容层 可安装Android应用
  16. android虚拟应用沙箱,Android的SandBox(沙箱)
  17. 读《洞穴奇案》——功利主义与法的精神
  18. 徐锋-用例和面向方面软件开发-UMLChina讲座-音频和幻灯
  19. 海思hi3519a的MIPI用法
  20. 图像质量评价及率失真性能曲线绘制

热门文章

  1. A053_项目部署_Linux介绍_CentOS
  2. zoj 2839 Find the Sequences(数学题)
  3. cesium 3d建筑物光效 泛光实体
  4. 小白如何自学编程? 看完这篇这些雷和坑千万不要踩!
  5. OpenStack newton版安装教程(4)——Neutron部分
  6. tableau无法建立连接_外部服务连接疑难解答 - Tableau
  7. 计算机网络波动大,网络不稳定怎么办,小编教你电脑网络不稳定怎么办
  8. 解决windows防火墙拦截FTP连接
  9. linux中创建目录树,linux怎样创建目录树
  10. circos 作图简介