基于Python的气象观测数据的解析与存储
师利霞;黄元媛
【摘 要】为了达到“一次解析,各处使用”的目的,根据工作的实际需要,使用Python技术对以文本格式存放的各类原始气象观测数据加以解析、整理与存储.该系统利用Python的Ftplib类库将存放在省局共享目录下的文本格式气象数据下载至本地,使用Python的“切片”技术将原始文本数据进行解析,进而采用Python的pymysql类库将整理后的数据存储到MySQL数据库中,满足了将观测数据高效、方便、快捷、灵活地应用到不同环境的需求.实践证明,该程序设计思路对气象数据的分析与处理具有一定的参考与借鉴意义.
【期刊名称】《宁夏工程技术》
【年(卷),期】2018(017)002
【总页数】5页(P144-148)
【关键词】气象站数据文件解析;Python;FTP;MySQL
【作 者】师利霞;黄元媛
几字钢规格型号【作者单位】内蒙古巴彦淖尔市气象局,内蒙古巴彦淖尔 015000;内蒙古巴彦淖尔市气象局,内蒙古巴彦淖尔 015000气象python零基础入门教程
【正文语种】中 文
【中图分类】P415
随着气象现代化业务发展,气象站建设得越来越多,气象站种类也越来越多,因此气象观测数据的分析与处理已成为气象业务中一项极其重要的内容。在日常气象观测工作中,有相当一部分原始气象数据是以文本格式有规律地进行保存的,这类以文本格式存储的气象资料,往往不便于查询、分析与统计,通常需要事先对数据进行预处理,加以解析整理并存储起来,再对数据进行分析与处理,以便获得有价值的信息。气象原始观测数据每10 min生成1个,且按气象要素各自单独保存为一个文本文件,灵活、高效地解析与存储这类年份跨度长、数据量大、文件格式多的气象原始数据是亟待解决的问题。
近年来,许多专家采用不同的技术与方法实现对气象观测数据的分析和应用,于平等[1]利
用Asp,VB.NET和ADO.NET技术解码原始数据,并入库生成图形化产品和数据表格;肖勇、郭金慧[2]对区域自动站的数据使用极值法控制剔除错误数据,降低站点缺测率;黄阁等[3]使用VB实现在MICAPS系统中自动站资料的地图化显示,方便预报人员查看各地最新气象要素;王长利[4]采用C#技术分析与处理气象原始观测数据,将数据解析与存储分离,并保存为Excel文档。
本文着重介绍基于Python技术对各类气象观测数据的解析及MySQL数据库存储技术方面的应用。Python[5]是一种面向对象、解释型计算机程序设计语言,具有简单易学、免费开源、跨平台可移植性好、语法简洁清晰,拥有丰富和强大的类库支撑等优点。该系统最大的特点之一便是具有了Python语言的跨平台特性,可以在Linux系统的服务器上部署,能够方便地实现程序的更新升级。该系统部署后便享有了Linux稳定可靠的优势。Linux是一套免费使用和自由传播,多用户、多任务、支持多线程和多CPU的类Unix操作系统。
1 系统简介
气象观测数据的解析与存储系统的主要功能是对气象原始观测数据进行整理与解析,按需导入MySQL数据库,所使用的数据为按气象要素分类保存的文本观测记录数据。该系统由
三大子系统和多个子模块构成。三大子系统主要为资料入库子系统、资料自动补传子系统、中心站补传子系统。其中,资料自动补传子系统又分为多个模块,用于查不同类型站点数据。该系统运行界面见图1。
该系统主程序为资料入库程序,程序启动首先读取站点信息表,然后每过10 min去省局数据服务器下载所需数据文件,解析文件内容存入数据库,并将没有到的站点缺测信息添加到缺测信息记录表中,具体流程见图2。
自动补传程序主要分为自动站数据模块、区域站数据模块以及无人站数据模块3个模块。补传程序根据缺测记录表中保存的站点类型信息自动选择启动相应处理模块进行补传,补传成功则删除缺测记录表中该信息。完成一轮站点信息补传后间隔数分钟进行下一轮补传,具体流程见图3。
图1 系统运行界面
图2 资料入库子程序
margintop失效图3 资料自动补传子程序
中心站补传程序主要是为了更好地实现信息完整性添加的子程序。华云中心站有着比省局共享文件方式更好的及时性,查市局中心站数据库为整个系统的辅助补传手段,具体流程见图4。
文件句柄是什么意思
图4 中心站补传子程序
2 各部分功能要点
2.1 Ftp下载
linux如何调用脚本省局采用Ftp方式共享气象资料,将气象资料通过Ftp下载到本地需要用到Python的Ftplib模块,模块初始化及连接至省局的代码:
其中:IP和Port为数据库服务器IP及端口,us-er和password为数据库用户和用户密码。
连接后首先需要在本地创建磁盘缓存文件,再将网络数据写入。将数据保存到本地代码:
2.2 文件格式
为什么sap导出excel是xml格式各类气象站点数据文件之间的文件命名规则是不相同的:
自动站单站数据文件名为
Z_SURF_I_IIiii_YYYYMMDDHHmmSS_O_AWS_FTM[-CCx].txt
无人站、区域站单站数据文件名为
Z_SURF_I_IIiii-REG_YYYYMMDDHHmmSS_O_AWS_FTM[-CCx].txt
其中:IIiii为站号;YYYYMMDDHHmmSS为观测记录时间;[-CCx]为报文订正时使用的订正标识;其他的Z_SURF_I_,-REG_以及_O_AWS_FTM均为固定写法。
自动站单站文件包含观测站基本信息、气压数据、气温和湿度数据、累计降水和蒸发数据、风观测数据、地温数据、自动观测能见度数据、人工观测能见度、云、天气现象、其他重要天气、小时内每分钟降水量、人工观测连续天气现象、数据质量控制码、文件结束符等内容。打开后的文件内容见图5。
区域站及无人站文件根据站点要素的不同分别包含观测站基本信息、观测时次、风观测数据、降水观测数据、气温观测数据、湿度观测数据、气压观测数据、草温以及低温观测数据、文件结束符等内容。打开后的文件内容见图6。
图5 自动站单站文件内容
图6 区域站无人站单站文件内容
2.3 数据的解析与提取
读取文件代码如下:
文件读取解析流程见图7。
其中,类似“strf[50:53]”的文件信息提取方式,被称为Python的“切片”技术。通过冒号相隔的2个索引来访问一定范围内的各个元素,从而将整个站点文件中所有的要素提取出来。同时,可以使用质量控制规则对解析出来的单个要素数据进行简单的质量控制[2],比如风向必须在0~360,对质量控制出现问题的站点将保存到质量控制错误日志中方便查看。所有气象站点要素的读取方式相同,唯一区别是不同类型站点数据文件中的要素保存的位置不同。读取解析不同类型站点文件只需修改程序中的“切片”索引值。
2.4 数据库设计与使用
该系统为了实现将气象数据永久保存,同时实现最大程度的共享,选择使用MySQL数据库作为数据存储方式。数据库中主要设计包含3张站点信息表(区域站信息表、自动站信息表、无人站信息表)、1张站点缺测信息表以及每个站点对应的站点数据表。其中,站点信息表主要字段有站名、站号、站点经纬度、海拔高度、建站日期、要素数等(图8);缺测信息表主要字段有站点类型、站名、缺测文件、查次数等(图9)。站点数据表则根据站点要素不同具有不同结构,单雨站主要字段为资料时间、雨量信息(图10);二要素站点主要字段为资料时间、雨量信息及温度信息(图11);其他多要素站点各有不同。
图7 文件读取解析流程
图8 站点信息表结构
图9 缺测信息表结构
图10 单雨站数据表结构
图11 二要素站数据表结构
利用pymysql模块读取数据库中区域站信息代码如下:
经过文件解析后,站点原始数据已经存放在了datadict数据字典中,将字典中的数据保存到MySQL数据库只需将上述代码中的query语句替换为保存数据的SQL语句:"insert into"+"%(station-ID)s(时间,小时雨量,分钟雨量)values(\'%(TT)s\',\'%(小时雨量)s\',\'%(分钟雨量)s\')"%datadict。
数据补传程序中查到的信息也会保存到相应模块的datadict字典数据中。将datadict字典中的数据更新到MySQL数据库的SQL语句为:"update %(stationID)s set小时雨量=\'%(小时雨量)s\',分钟雨量=\'%(分钟雨量)s\'"%datadict+"where时间=\'"+now.strftime("%Y-%m-%d%H:%M:%S")+"\'"。
2.5 程序定时运行
气象数据的上传有一个时间周期,该系统于每10 min后的第3 min启动新的线程去检测省局共享目录,读取解析需要的文件内容并存储到数据库中。该系统通过Python的sched模块实现定时功能代码如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。