将多个月的nc数据文件合并成一个(月平均)

最近在处理nc数据,希望可以获得多年的月平均数据。但是ERA这个产品从网站上下载到的是每个月的日数据,所以我希望可以把他合成一个,以每个月月平均数据存储的nc文件。

首先是引入要用的库:

from netCDF4 import Dataset   #nc库功能不用说,读nc文件肯定要用
import numpy as np
from pandas import Series
import netCDF4 as nc
import tkinter as tk
from tkinter import filedialog #这两个是用来读取文件夹的

定义一个nc文件类:

class ncfile:def __init__(self,file_name):#用于读取数据NCfile=nc.Dataset(file_name)#获取维度的值,一般有时间、经纬度、各个数值self.time=NCfile.variables['time'][:].dataself.latitude=NCfile.variables['latitude'][:].dataself.longitude=NCfile.variables['longitude'][:].dataself.e=NCfile.variables['e'][:].dataself.sro=NCfile.variables['sro'][:].dataself.ssro=NCfile.variables['ssro'][:].dataself.tp=NCfile.variables['tp'][:].data

定义几个要用的全局变量:

n=0 #这个用来记录读入的文件数
'''
下面是用来存储原始数据的,其实像time、latitude、longitude这种是不需要单独
记录的,只是为了在后面偷个懒,就顺便打上了,但是这里其实占用了一部分内存,不太好
'''
times=[]
latitudes=[]
longitudes=[]
es=[]
sros=[]
ssros=[]
tps=[] #下面的是用来存储最后要写入的数据
times_after=[]
latitudes_after=[]
longitudes_after=[]
es_after=[]
sros_after=[]
ssros_after=[]
tps_after=[]

然后定义读入文件的函数:

def read_files():#读取存放要合并文件的文件夹root=tk.Tk()root.withdraw()Folderpath=filedialog.askdirectory()    filelist = os.listdir(Folderpath)global nn=len(filelist)for i in range(n):temp=ncfile(str(Folderpath)+"/"+filelist[i])times.append(temp.time)latitudes.append(temp.latitude)longitudes.append(temp.longitude)es.append(temp.e)sros.append(temp.sro)ssros.append(temp.ssro)tps.append(temp.tp)

处理数据,得到每个月月平均值的矩阵:

read_files()
for i in range(n):tps_after.append(np.mean(tps[i],axis=0))es_after.append(np.mean(es[i],axis=0))sros_after.append(np.mean(sros[i],axis=0))ssros_after.append(np.mean(ssros[i],axis=0))

最后创建新的nc文件并写入数据:

#写入部分
#创建新文件
new_NC = nc.Dataset("test-result.nc", 'w', format='NETCDF4')'''
定义维度,后一个参数表示维度的长度,因为是合并的同一个产品的数据,所以是统一
的,注意维度的长度一定要和读入的数据匹配
'''
new_NC.createDimension('time', n)
new_NC.createDimension('latitude', len(latitudes[0]))
new_NC.createDimension('longitude', len(longitudes[0]))
new_NC.createDimension('e', len(es[0]))
new_NC.createDimension('sro', len(sros[0]))
new_NC.createDimension('ssro', len(ssros[0]))
new_NC.createDimension('tp', len(tps[0]))#定义变量,这里需要规定变量的类型,以及限制它的维度
#可以看到,四个与数据相关的变量,其由另外三个基本维度约束
new_NC.createVariable('time', 'u4',("time"))
new_NC.createVariable('latitude', 'f', ("latitude"))
new_NC.createVariable('longitude', 'f', ("longitude"))
new_NC.createVariable('e', 'f', ("time","latitude","longitude"))
new_NC.createVariable('sro', 'f',("time","latitude","longitude"))
new_NC.createVariable('ssro', 'f',("time","latitude","longitude"))
new_NC.createVariable('tp', 'f',("time","latitude","longitude"))#向变量中填充数据
new_NC.variables['latitude'][:] = latitudes[0]
new_NC.variables['longitude'][:] = longitudes[0]new_NC.variables['e'][:]=np.array(es_after)
new_NC.variables['sro'][:]=np.array(sros_after)
new_NC.variables['ssro'][:]=np.array(ssros_after)
new_NC.variables['tp'][:]=np.array(tps_after)#最后记得关闭文件
new_NC.close()

新人,还在学习和探索中,有问题请各位大佬指正。

将多个月的nc数据文件合并成一个(月平均)相关推荐

  1. mysql多行合并成一行_数据文件合并与拆分

    [摘要] 本文介绍将多个文本文件和 Excel 文件合并成一个文件,或者将一个文件拆分成几个小文件时,如何处理会遇到的几种情况,并用 esProc SPL 举例实现. 在数据处理业务中,经常要把文件结 ...

  2. php 根据一个数据组的id 取得另一个数据组对应的名称,怎样从两个spss的数据文件中选出id相同的数据,合并成一个文件...

    求教高手怎样从两个spss的数据文件中选出id相同的数据,合并成一个文件.谢谢.排序后用merge file操作,怎么原数据没有变化?output中提示这些 Renaming has created ...

  3. peel在Linux生成excel,如何将多个Excel文件合并成一个且保留原有数据?

    如何将多个Excel文件合并成一个且保留原有数据?事实上,我们可以借用Excel宏命令来处理该操作,并且保留原有数据,建立多个Sheet页,具体操作请看下文多个Excel文件合并成一个的方法. 如何将 ...

  4. excel如何把多张表合并成一个表_如何将多个excel文件合并成一个文件-多个excel文件合并成一个excel表的方法 - 河东软件园...

    Excel是我们最常用的数据处理软件,而在我们使用Excel时,常常会处理同一类的数据,例如,我们制作月度报表,那么在年末时我们共积累了1至12月的月度报表,这时我们的Excel的文档将多达12个,实 ...

  5. 怎么让两个java文件关联,怎么把多个excel文件合并成一个【几个excle合并成一个】...

    怎么把多个excel文件合并成一个 新建一个BOOK文件,按Alt F11这二个键,VBA编辑界面,点击编辑的菜单:"插入"--"",然后在里面完整复制下面的代 ...

  6. linux下将多个文件去除文件头合并_Linux下把多个文件合并成一个文件 - 卡饭网...

    互盾PDF分割合并工具将多个PDF文件合并成一个PDF文档 互盾PDF分割合并工具将多个PDF文件合并成一个PDF文档     互盾PDF分割合并工具将多个PDF文件合并成一个PDF文档 一.下载并安 ...

  7. 将一个excel多个文件合并成一个文件的多个sheet

    将一个excel多个文件合并成一个文件的多个sheet 1.在新建文件夹目录下,将需要合并的excel文档放到该目录下 2.新建一个空白文档,将鼠标移动到sheet工作表上,单击右键,选择" ...

  8. 多个txt文件合并成一个文本

    如何将多个txt文件合并成一个文本 (1)将多个txt文件放在一个文件夹下. (2)编写一个批处理文件,里面的命令为type *.txt >a.txt (3)执行该批处理文件,则所有txt文件合 ...

  9. java io合并两个txt文件_java将多个txt文件合并成一个文件

    [实例简介] [实例截图] [核心代码] package com.mingrisoft; import java.awt.BorderLayout; import java.awt.EventQueu ...

最新文章

  1. bert推理速度太慢如何解决
  2. CMU发布船新「论文评审」Python程序,淘汰人工审核,自动给arXiv打分
  3. 数据丢失如当头棒喝,数据备份重如山!
  4. Python Django模板页面自定义过滤器实现md语法及字符串切割代码示例
  5. postfix文档修正
  6. Ubuntu 16.04 安装网易云音乐
  7. vue中设置子组件的点击事件不影响父组件的点击事件
  8. php 编译 sass,如何在Symfony 3中使用纯PHP编译SASS(scss)
  9. 梳理 | 交叉熵、相对熵(KL散度)、JS散度和Wasserstein距离(推土机距离)
  10. 如何提升代码的安全性 —— 代码防御性编程的十条技巧
  11. 中兴b860刷机运行Linux,整理 B860A 刷机,安装第三方,升降固件,进recovery
  12. qt geomery的单位是什么_生命吗哪QT灵修11月28日
  13. WIN 7 系统 问题记录
  14. hualinux 编程概念 3.11 快速原型模型:以最快最小代价完成产品特性
  15. 运动无线耳机哪个品牌比较好、口碑最好的运动蓝牙耳机
  16. linux下kegg注释软件,工具篇丨GO和KEGG富集不到通路?快试试这个超赞的功能分析工具吧...
  17. 空字符串、NULL、空格串的区别
  18. unzip error 22 - Invalid argument
  19. 2019-9-2-程序员壁纸
  20. 爱科设立爱科农业基金会

热门文章

  1. vue 程序执行的过程
  2. python编程语言创始人-人工智能“网红”编程语言Python进入山东小学课本
  3. VisualSVN Server是什么
  4. 宏与内联函数(面试常考)
  5. WordPress主题分享:Avada主题v7.8.0免费下载 2022年最新版
  6. access窗体转换html,Access窗体之间控件的传值三种方式
  7. symbol DS3578条码扫描器设置回车
  8. java开发高端说法_扣丁学堂教你如何成为JavaEE高端开发人才
  9. python高德地图api调用实例_Python 利用高德地图api实现经纬度与地址的批量转换...
  10. C#七层架构 ----【登录】