WRF模式运行结束后会生成一系列wrfout文件,我们利用python中的netcdf库对输出文件进行提取变量和做区域平均处理,下面是代码过程:
import netCDF4 as nc
import numpy as np
import os
read_path = r"H:/CMFD/wrfoutfile/" # 确定被处理wrfout文件路径
files = os.listdir(read_path) # 在路径中读取全部文件到files中
files.reverse() # 将files的文件顺序倒转
filename1 = 'out_inc.txt' # 创建三个txt文件用于储存inc/nnc/nsh三种降水数据
filename2 = 'out_nnc.txt'
filename3 = 'out_nsh.txt'
with open(filename1, 'w') as filenew1,\
open(filename2, 'w') as filenew2,\
open(filename3, 'w') as filenew3:
# 遍历files中wrfout文件赋为file,并按顺序处理file
for file in files:
f = nc.Dataset(read_path + "\\" + file) # 读取file也就是单个wrfout文件中内容
# 用variables函数读取wrfout文件中单个变量'RAINC','RAINNC','RAINSH'
inc = f.variables['RAINC']
INC = inc[:]
nnc = f.variables['RAINNC']
NNC = nnc[:]
nsh = f.variables['RAINSH']
NSH = nsh[:]
# 将三个变量中的数值按区域做平均后写进三个txt文件中
for pre1 in INC:
pwd1 = np.mean(pre1)
ava1 = pwd1
t1 = str(ava1)
filenew1.write(f"{t1}\n")
for pre2 in NNC:
pwd2 = np.mean(pre2)
ava2 = pwd2
t2 = str(ava2)
filenew2.write(f"{t2}\n")
for pre3 in NSH:
pwd3 = np.mean(pre3)
ava3 = pwd3
t3 = str(ava3)
filenew3.write(f"{t3}\n")
print("success")
# 由于文件中降水是每日四次累加形式,所以下面代码为四取一(代表每日数据)的过程,然后生成新文件
with open("out_nsh.txt", "r") as f:
line = f.readline()
a = []
while line:
a.append(line)
line = f.readline()
b = []
for i in range(0, len(a), 4):
b.append(a[i])
with open("nsh.txt", "a") as f:
for i in b:
f.write(i)
print(len(a))
with open("out_nnc.txt", "r") as f:
line = f.readline()
a = []
while line:
a.append(line)
line = f.readline()
b = []
for i in range(0, len(a), 4):
b.append(a[i])
with open("nnc.txt", "a") as f:
for i in b:
f.write(i)
print(len(a))
with open("out_inc.txt", "r") as f:
line = f.readline()
a = []
while line:
a.append(line)
line = f.readline()
b = []
for i in range(0, len(a), 4):
b.append(a[i])
with open("inc.txt", "a") as f:
for i in b:
f.write(i)
print(len(a))
print("successful complete!")
如有建议欢迎讨论,也可留言互相学习!