栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

MRR2-微雨雷达基本数据读取----python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MRR2-微雨雷达基本数据读取----python

微雨雷达可测量其上空垂直剖面高达数公里范围内的雨强、雨滴谱、粒径分布、雷达反射率、雨滴降落速度及其他降雨相关特性。其有三类数据,分别为raw原始谱数据、ave平均数据以及pro处理数据,为了避免重复造轮子,先google搜索相关的解决方法。

发现mrr2c库可以将微雨雷达文件的格式由ascii型转换为netCDF格式,这个倒是方便进行后续操作,由于已有成熟的netCDF库包,后续的处理会很方便。然而用自己的文件进行测试出现了错误 。测试代码比较简单,放在下面:

import mrr2c
import numpy as np
import netCDF4
a=mrr2c.mrr2c('MRR20210727.raw')
print(a.keys())

如果要纠正这个错误又要折腾半天,估计是我用的数据格式之类的原因。于是舍弃这个方法。

查看IMProToo库包的具体信息,链接,Too: Improved Mrr Processing Tool,发现这个库的功能更加全面,也包括了数据格式的转换,但是输入的数据只能是原始raw数据并根据原始数据处理出ave和pro数据,对于微雨雷达的average和pro产品数据,则需要自己进行读取处理了。

简单的代码验证

import IMProToo
#原始数据读取
rawdata=IMProToo.mrrRawData(r'F:ActDataRawSpectra.raw')
#pro数据
processedSpec=IMProToo.MrrZe(rawdata)
#ave数据
processedSpec.averageSpectra(60)
#processedSpec.averageSpectra(120)
#转换为netCDF格式
processedSpec.writeNetCDF('filename',ncForm='NETCDF3_CLASSIC')

读取微雨雷达的pro产品数据,只能自己撸代码。观察数据的特征

 一个时次是由MRR开头的表头,以及后续的各变量组成,格式为ascii,可直接用open()命令进行读取,以反射率因子的读取为例,进行提取保存

def mkdir(path):
    import os
    folder = os.path.exists(path)
    if not folder:
        os.makedirs(path)
    else:
        print('该文件夹存在')
filepath=r'F:ActDataProcessedData.pro'
savepath='F:\MRR\'
def extract_Z(filepath,savepath):
    filepath1=filepath
    name = filepath1[34:40]
    date = filepath1[43:45]
    resultfile = savepath
    mkdir(resultfile)
    f2 = open(resultfile + name + date + '.txt', 'w')
    mrrpro_file = open(filepath, mode='r')
    txt1 = mrrpro_file.readlines()  # 按行读取保存到一个列表中
    for line in txt1:
        if line.startwith('Z') :
            f2.write(line)
    f2.close()
    mrrpro_file.close()
extract_Z(filepath,savepath)

此时保存的仍是str格式的数据,需要进一步处理成数组

import numpy as np
pp=r'F:MRR20210920210905Z.txt'
file=open(pp,mode='r')
def to_list(string):
    a=string
    b = []
    for i in range(31):#根据数据特点,一个数据所占的长度为7
        m = a[3 + i * 7:10 + i * 7]
        if m == '       ':
            m = np.nan
            b.append(m)
        else:
            m=m.strip()
            b.append(m)
    return b
result=[]
a=file.readlines()
for line in a:
    s=to_list(line)
    result.append(s)
for i in range(len(result)):
    if len(result[i][:])==31:
        pass
    else:
        print(i,result[i][:])
for i in range(len(result)):
    for j in range(31):
        try:
            if result[i][j]==np.nan:
                pass
            else:
                result[i][j]=float(result[i][j])
        except ValueError:#去除换行导致的错误
            result[i][j]=np.nan
result=np.array(result)

至此大功告成,其他量的读取方法类似。

总结一下,处理不熟悉的数据时,善于借助网络上的资源,基本可以解决大部分问题,且节省时间。处理文件类型的步骤也大同小异,需要多学习积累。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920921.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号