爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 47781|回复: 19

[求助] BIN格式雨滴谱观测数据BUFR解码失败

[复制链接]

新浪微博达人勋

发表于 2021-1-13 23:05:09 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
这两天得到了雨滴谱数据,但是无法解码,哪位高人来解惑?

附件有雨滴谱BIN格式数据和说明文档

我试着解码,但是没成功,莫非是自定义编码?

python脚本如下:

# coding:utf-8
"""
该脚本用于读取雨滴谱数据文件BIN
脚本文件与数据文件位于相同目录
"""

from bs4 import BeautifulSoup
import requests,chardet,os,sys
from urllib import request

thisPyFile=sys.argv[0]#该脚本文件绝对路径
path=os.path.dirname(thisPyFile)#该脚本文件所在目录
#数据文件:
file=path+'\\Z_SURF_I_59854_20180814232000_O_AWS-RSD-MM_FTM.BIN'
print('数据文件是否存在:',os.path.isfile(file))

fp=open(file,'rb')
x=fp.read()
n=len(x)
fp.close()
fp=open(file,'rb')
for i in range(n):
    x=fp.read(1)
    result = chardet.detect(x) #识别编码
    if result['encoding'] == None:
        print('无法确定编码')
        continue
    #按识别的编码输出字符:
    print(x.decode(result['encoding']),end='')
fp.close()


Z_SURF_I_59854_20180814232000_O_AWS-RSD-MM_FTM.BIN

1.65 KB, 下载次数: 65, 下载积分: 金钱 -5

雨滴谱观测数据BUFR编码格式(V1.0).docx

94.2 KB, 下载次数: 95, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-12-31 21:47:39 | 显示全部楼层

import os
dir="E:/1106/20211106"
of = open(r"E:\1106.csv", 'w+')
for parentdir, dirname, filenames in os.walk(dir):
   for filename in filenames:
    inFiles = '%s/%s' % (dir, filename)
    #print inFiles
    f=addfile(inFiles, keepopen=True)
    obs=f["obs"]
    #print(obs)
    lon=obs.member_array("Longitude_high_accuracy")
    lat=obs.member_array("Latitude_high_accuracy")
    lon=(lon-1.87E7)*1.E-5
    lat=(lat-9.E6)*1.E-5
    #print(lon,lat)
    st_id=obs.member_array("WMO_station_number")
    seq1=obs.member_array("seq1")
    #print(seq1.get_members())
#88888888888888
    time=seq1.member_array("Short_time_increment")
    #print(time)
#999999999999999
    seq2=seq1.member_array("seq2")
    #print(seq2.get_members())

    seq3=seq2.member_array("seq3")
    #print(seq3.get_members())
    n_raindrop=seq3.member_array(u"雨滴个数")
   
    n_raindropbm=seq3.member_array(u"谱图数据编号")
    #print(n_raindropbm)
    print(filename[15:29],n_raindrop,n_raindropbm)
    if isinstance(n_raindrop,int):
       #print(filename[15:29],n_raindrop,type(n_raindrop))
       of.write(filename[15:29]+",个数")
       of.write("%s" %(n_raindrop))
       of.write("\n")
       of.write(filename[15:29]+",编码")
       of.write("%s" %(n_raindropbm))
       of.write("\n")
    else:
     ll=len(n_raindrop)
     if ll>0:
    #print("******",ll)
      of.write(filename[15:29]+",个数")

      for i in range(ll):
        nn=n_raindrop
        nn1=n_raindropbm
        #print("@@@@@",nn,nn1)
        line="%s%d" %(",",nn)
        of.write(line)
      of.write("\n")
      of.write(filename[15:29]+",编码")
      for i in range(ll):
        nn1=n_raindropbm
        line1="%s%d" %(",",nn1)
        of.write(line1)
      of.write("\n")
    f.close()
of.close()

改了楼主代码,可以批量解析雨滴谱,发现有些时次只有一个或一个普段数据,那么个数和编码会解码成一个int数据,没有降水或超过1个时候是保存的数组,然后把没有雨滴数据剔除掉
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2021-2-1 15:54:07 | 显示全部楼层
请问楼主解决了吗?最近也想搞这个
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-2-1 20:36:49 | 显示全部楼层
xianrenzhang 发表于 2021-2-1 15:54
请问楼主解决了吗?最近也想搞这个

好像是软件公司把文件写错了,目前我手里也没有其他文件来试试
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-2-6 23:21:30 | 显示全部楼层
参考这个:
burf_cma_raindrop.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-4 16:41:53 | 显示全部楼层
又在这遇到了,这个你搞定了吗?  是按照你发的编码格式来的吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-5 09:42:37 | 显示全部楼层

addfile 是什么函数啊?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-30 12:49:11 | 显示全部楼层

想请教一下这个代码最开始import了哪些模块?要pip些什么包
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-30 12:53:56 | 显示全部楼层
kittyjsj 发表于 2021-3-30 12:49
想请教一下这个代码最开始import了哪些模块?要pip些什么包

这个是MeteoInfoLab脚本(Jython语言),和Python有些区别。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-30 19:02:39 | 显示全部楼层
本帖最后由 kittyjsj 于 2021-3-30 19:03 编辑
MeteoInfo 发表于 2021-3-30 12:53
这个是MeteoInfoLab脚本(Jython语言),和Python有些区别。

老师,我按照您的方法输出“雨滴谱的设备类型”“谱图数据编号”和“雨滴个数”,是不是就按照《雨滴谱观测数据BUFR编码格式(V1.0版)》里的“3.4 自定义标志表 0 13 205雨滴粒子级别编号”,对应分析,比如设备类型为200,输出第一个谱图数据编号为45,雨滴个数为1,那速度范围为0.400-0.600,直径范围为0.000-0.125的雨滴数为1个?
C:\Users\jsjki\Desktop\代码数字
C:\Users\jsjki\Desktop\雨滴谱输出
雨滴谱输出.JPG
代码数字.JPG
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-30 22:07:44 | 显示全部楼层
kittyjsj 发表于 2021-3-30 19:02
老师,我按照您的方法输出“雨滴谱的设备类型”“谱图数据编号”和“雨滴个数”,是不是就按照《雨滴谱观 ...

看起来像是这样,我也没有处理过雨滴谱数据,不清楚是否合理。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表