用Python批处理指定数据-以WRF输出结果为例演示按照指定维度合并(附示例代码)
2023-06-13 09:13:51 时间
使用过WRF的人都知道,它的模拟结果是按照我们指定的时间间隔和模拟时间段依次输出的。但在处理数据的时候呢,比如想画一个时间趋势图之类的时候,挨个读取数据非常繁琐。我们希望能够把所有的数据或者某个我们关心的变量单独提取出来,让其按照指定的维度,如时间维度来排序并整合成一个文件。下面我就分享一下我在日常科研中为了解决这个问题而写的代码,供大家参考使用(代码很简单, 大家只需要把文件名、路径改成自己的就可以用了)。
因为一般WRF 默认输出文件的文件名后缀没有.nc,无法直接使用xarray进行读取,也就用不了concat函数。所以这里我们先给所有的输出文件批量添加后缀名".nc"。
#导入库
import numpy as np
import xarray as xr
import os
from netCDF4 import Dataset
#选择 notebook 所在文件夹(也可自行指定文件路径)
path = os.getcwd()
#一般 WRF 默认输出文件的文件名后缀没有.nc,无法直接使用xarray进行读取,进而用不了concat函数
#这里我们批量修改文件名,加上后缀.nc
file_names = os.listdir(path)
for file in file_names:
if file[0:10] != 'wrfout_d01':
continue
base_name = os.path.basename(file)
new_n = base_name + '.nc'
os.rename(os.path.join(path, file), os.path.join(path, new_n))
#选取path文件路径下所有前缀名为wrfout_d01的nc文件
list_names = []
for ncfile in os.listdir(path):
if ncfile[0:10] != 'wrfout_d01': #通过索引选择想要的数据,可以按照需要进行更改
continue
list_names.append(ncfile)
#将模拟结果文件名按照时间进行排序
list_names_sort = np.sort(list_names)
到这里,输出结果如下(未截图完全):
下面分别展示选择单个变量进行合并以及将所有变量按照指定维度进行合并。这里用了concat函数,具体大家可以见从xarray走向netCDF处理(四):合并与计算进行了解。
一、以单个变量P为例(可按需更改),按照时间顺序进行合并
#以单个变量P为例(可按需更改),按照时间顺序进行合并
file_list = []
for i in list_names_sort:
print(i)
ds = xr.open_dataset(i)
file_list.append(ds['P'])
data = xr.concat(file_list, "Time")
data.to_netcdf('wrf_data.nc')
结果如下:
二、将所有变量,按照时间顺序进行合并 (顺便介绍一下如何计算气压并保存输出)
#将所有变量,按照时间顺序进行合并
file_list = []
for i in list_names_sort:
print(i)
ds = xr.open_dataset(i)
file_list.append(ds)
data = xr.concat(file_list, "Time")
#顺便介绍一下如何计算气压并保存输出
data['pressure'] = (('Time','bottom_top','south_north','west_east'),np.zeros_like(data['P'])*np.NAN)
for i in range(len(data.Time)):
data['pressure'][i] = data['P'][i]+data['PB'][i]
data['pressure'].attrs['FieldType']='104'
data['pressure'].attrs['MemoryOrder']='XYZ'
data['pressure'].attrs['description']='PRESSURE'data['pressure'].attrs['units']='Pa'
data['pressure'].attrs['stagger']=' '
data.to_netcdf('wrf_data.nc')
结果如下(以四个时刻为例):
到这里呢,就已经实现我们想要的效果啦。后面的数据处理,无论是求平均还是计算趋势,按照个人需求来好了。
相关文章
- python详细安装教程环境配置_Python配置环境
- 浙江新增python编程_9月起,浙江省八年级新增Python编程课,未来编程是处理大数据的手段…「建议收藏」
- 苹果电脑python官网下载步骤-Python下载和安装图文教程[超详细]
- python的random()函数用法_Python随机函数random用法示例
- python海龟作图红绿灯_海龟作图—用Python绘图
- Python元组_python输出元组
- Python里divmod_python yield函数
- Python标识符的命名规则,下列哪些是对的?_python标识符不能使用关键字
- 用python画一个爱心_python 画一个点
- Python字典提取_python字典键对应的值
- python hexdump_笨办法学 Python · 续 练习 26:`hexdump`
- Python格式化输出
- 狂揽两千星,速度百倍提升,高性能Python编译器Codon开源
- Python输出代码怎么写?Python各种输出语句详解
- python计算两个日期相差的天数详解编程语言
- python模拟http请求2详解编程语言
- Python输出函数print()总结(python print())详解编程语言
- Python装饰器详解
- 利用 Python 特性在 Jinja2 模板中执行任意代码
- Python爬取MySQL数据,助力数据分析(python读取mysql数据)
- python抓取豆瓣图片并自动保存示例学习