请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 393|回复: 7

meteoinfo 批量读入micaps数据报错

[复制链接]

新浪微博达人勋

发表于 2020-6-28 17:12:00 | 显示全部楼层 |阅读模式

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

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

x
想通过meteoinfo批量读入micaps数据进行站点插值。数据一个一个插值可以处理,但是由于数据量多,想要进行批量处理。数据名如 17071208.000 17071208.003 17071208.006 17071208.009 ...... 写了如下脚本,报错:>>> run script...Traceback (most recent call last):
  File "C:\Users\dell\Desktop\ss\G2S.py", line 3, in <module>
    import clr
ImportError: No module named clr'。麻烦各位帮忙看一看吧,脚本不复杂。

# This Python file uses the following encoding: GB2312

import clr
clr.AddReferenceByPartialName("System")
clr.AddReferenceByPartialName("System.Windows.Forms")
clr.AddReferenceByPartialName("System.Drawing")
from System import *
from System.Windows.Forms import *
from System.Drawing import *
clr.AddReference("MeteoInfoC.dll")
from MeteoInfoC import *
from MeteoInfoC.Layout import *
from MeteoInfoC.Data import *

#---- &#65533;&#65533;&#65533;&#65533;·&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
BaseDir = "C:\\Users\\dell\\Desktop\\ss\\MeteoInfo\\"
MapDir = "C:\\Users\\dell\\Desktop\\ss\\MeteoInfo\\Map\\"
LegendDir = "C:\\Users\\dell\\Desktop\\ss\\MeteoInfo\\Legend\\"
DataDir =  "C:\\Users\\dell\\Desktop\\ss\\\EC-thin\\2T\\999\\"
OutDir = "C:\\Users\\dell\\Desktop\\ss\\"
#---- &#65533;&#65533;&#65533;&#65533;MIApp&#65533;&#65533;&#310;&#65533;&#65533;&#65533;
myApp = MIApp()
#---- &#65533;&#785080;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#316;&#65533;
for i in range(0,72,3) :
    fn = '17071208'  + '.' + str(i)
df = os.path.join(dataDir, fn)
myApp.OpenMICAPSData(df)
#---- &#65533;&#65533;&#545;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#1145;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
gData = myApp.GetGridData("var")
#---- &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#47202;&#65533;&#65533;&#65533;&#1406;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#316;&#65533;
inf =  "C:\\Users\\dell\\Desktop\\ss\\aa.csv"
outf = os.path.join(outDir,'17071208'  + str(i) + '.csv')
#---- &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#1906;&#65533;&#1461;&#938;&#1406;&#65533;&#65533;&#65533;&#65533;&#65533;&#1891;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#938;&#65533;&#316;&#65533;
gData.ToStation(inf, outf)


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

新浪微博达人勋

发表于 2020-6-28 17:20:52 | 显示全部楼层
这个程序太旧了,建议参考这里:http://bbs.06climate.com/forum.php?mod=viewthread&tid=35191
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-6-29 18:39:38 | 显示全部楼层
本帖最后由 OomaulenOo 于 2020-6-29 18:42 编辑

王老师 感谢您的回答。按照您说的脚本改了脚本。但是文件读入这个还是有错。能不能麻烦您再帮忙看一下。数据是这种格式 17071208.000 17071208.003 17071208.006 17071208.009 ...... 我用for i range(0,9,3):这样的循环读入,只会读入并插值17071208.006这个数据,重启电脑以后又提示错误 run script...
  File "C:\Users\dell\Desktop\ss\xinG2S.py", line 7
    for i in range(0,9,3) :
    ^
SyntaxError: mismatched input '' expecting EOF。    然后用while循环读入,直接没反应,只显示run script。比较着急麻烦您帮忙看一下脚本吧。
###############for i 脚本
#Open station file as table data
stdata = readtable('C:/Users/dell/Desktop/ss/aa.csv', delimiter=',', format='%s%f%f')
x = stdata['Longitude']
y = stdata['Latitude']
#Add data file
DataDir =  "C:\\Users\\dell\\Desktop\\ss\\\EC-thin\\2T\\999\\"
    for i in range(0,9,3) :
    fn = '17071208'  + '.00' + str(i)
    df = os.path.join(DataDir, fn)
f = addfile_micaps(df)
#Get data variable
psv = f['var']
#Get dimension array   
var = psv[0,0,'10:60','60:140']   
#Interpolate to stations   
var_st = var.tostation(x, y)   
#Add column to table data   
colname = '2T'
stdata.addcoldata(colname, '%d', var_st)
#Save table data to a file
OutDir = "C:\\Users\\dell\\Desktop\\ss\\"
fn= os.path.join(OutDir,  '17071208.00'  + str(i) + '.csv')
stdata.savefile(fn)
print 'Finish...'

############while脚本
#Open station file as table data
stdata = readtable('C:/Users/dell/Desktop/ss/aa.csv', delimiter=',', format='%s%f%f')
x = stdata['Longitude']
y = stdata['Latitude']
#Add data file
DataDir =  "C:\\Users\\dell\\Desktop\\ss\\\EC-thin\\2T\\999\\"
s = 0
e = 9
while s < e:
    fn = '17071208'  + '.00' + str(s)
df = os.path.join(DataDir, fn)
f = addfile_micaps(df)
#Get data variable
psv = f['var']
#Get dimension array   
var = psv[0,0,'10:60','60:140']   
#Interpolate to stations   
var_st = var.tostation(x, y)   
#Add column to table data   
colname = '2T'
stdata.addcoldata(colname, '%d', var_st)
#Save table data to a file
OutDir = "C:\\Users\\dell\\Desktop\\ss\\"
fn= os.path.join(OutDir,  '17071208.00'  + str(s) + '.csv')
stdata.savefile(fn)

s=s+3

print 'Finish...'
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-6-29 19:12:31 | 显示全部楼层
OomaulenOo 发表于 2020-6-29 18:39
王老师 感谢您的回答。按照您说的脚本改了脚本。但是文件读入这个还是有错。能不能麻烦您再帮忙看一下。 ...

Python的基本语法你需要自己学一下。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-6-30 13:20:37 | 显示全部楼层
本帖最后由 OomaulenOo 于 2020-6-30 17:30 编辑
MeteoInfo 发表于 2020-6-29 19:12
Python的基本语法你需要自己学一下。

王老师 谢谢你的回答。循环的语句问题已经解决了。但是现在是每插值出来的数据文件里2T都会多一列(计算出的结果我附到后面了),就是都重复多一列,每次都多一列一样的数据,是什么原因啊,对meteoinfo语句不是很了解,麻烦您再帮忙看一下吧。
for i in range(0,10,3):
    fn = '17071208'  + '.00' + str(i)
    df = os.path.join(DataDir, fn)
    f = addfile_micaps(df)
    #Get data variable
    psv = f['var']
    #Get dimension array   
    var = psv[0,0,'10:60','60:140']   
    #Interpolate to stations   
    var_st = var.tostation(x, y)   
    #Add column to table data   
    colname = '2T'
    stdata.addcoldata(colname, '%d', var_st)
    #Save table data to a file
    fn= os.path.join(OutDir,  '17071208.00'  + str(i) + '.csv')
    stdata.savefile(fn)
print 'Finish...'

得到插值结果如下:(每循环一次多一列一样的数据)
17071208.000
StidLongitudeLatitude2T
51462
87.55
43.85
23.45676
5764
88.87
43.22
24.40143
5016
87.81
43.68
19.93592
51466
87.89
43.53
21.98876
5022
87.58
43.67
21.49034
5029
87.31
43.84
22.46878
5522
87.43
44.02
23.96086
5506
87.89
43.95
21.8286
5503
86.88
44.18
24.56589
6301
93.79
43.32
11.7856

17071208.003
Stid        Longitude        Latitude        2T        2T
51462        87.55        43.85        28.72156158        28.72156158
5764        88.87        43.22        27.96308075        27.96308075
5016        87.81        43.68        24.72854233        24.72854233
51466        87.89        43.53        26.69956432        26.69956432
5022        87.58        43.67        26.88799831        26.88799831
5029        87.31        43.84        28.33639757        28.33639757
5522        87.43        44.02        30.69737729        30.69737729
5506        87.89        43.95        26.01828635        26.01828635
5503        86.88        44.18        31.21655736        31.21655736
6301        93.79        43.32        16.68683662        16.68683662

17071208.006
Stid        Longitude        Latitude        2T        2T        2T
51462        87.55        43.85        32.15075602        32.15075602        32.15075602
5764        88.87        43.22        29.95905466        29.95905466        29.95905466
5016        87.81        43.68        27.87310005        27.87310005        27.87310005
51466        87.89        43.53        29.64021347        29.64021347        29.64021347
5022        87.58        43.67        29.76046132        29.76046132        29.76046132
5029        87.31        43.84        31.26472454        31.26472454        31.26472454
5522        87.43        44.02        34.25641833        34.25641833        34.25641833
5506        87.89        43.95        29.74860923        29.74860923        29.74860923
5503        86.88        44.18        34.55239706        34.55239706        34.55239706
6301        93.79        43.32        20.05718759        20.05718759        20.05718759

17071208.009
Stid        Longitude        Latitude        2T        2T        2T        2T
51462        87.55        43.85        33.87795848        33.87795848        33.87795848        33.87795848
5764        88.87        43.22        32.54930869        32.54930869        32.54930869        32.54930869
5016        87.81        43.68        29.46648006        29.46648006        29.46648006        29.46648006
51466        87.89        43.53        31.31450215        31.31450215        31.31450215        31.31450215
5022        87.58        43.67        31.33489411        31.33489411        31.33489411        31.33489411
5029        87.31        43.84        32.6379514        32.6379514        32.6379514        32.6379514
5522        87.43        44.02        35.81078707        35.81078707        35.81078707        35.81078707
5506        87.89        43.95        31.3209315        31.3209315        31.3209315        31.3209315
5503        86.88        44.18        35.84986668        35.84986668        35.84986668        35.84986668
6301        93.79        43.32        20.07841808        20.07841808        20.07841808        20.07841808





密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-1 12:03:24 | 显示全部楼层
MeteoInfo 发表于 2020-6-29 19:12
Python的基本语法你需要自己学一下。

王老师上面反映的问题能不能麻烦您有空帮忙看一下,找了很多人也没能解决,清空数组也试了,还是不行。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-7-1 14:18:49 | 显示全部楼层
OomaulenOo 发表于 2020-7-1 12:03
王老师上面反映的问题能不能麻烦您有空帮忙看一下,找了很多人也没能解决,清空数组也试了,还是不行。

可以在循环里先将stdata上次增加的‘2T'列删除,然后再addcoldata增加新的’2T‘列。

stdata.delcol('2T')
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-1 16:16:32 | 显示全部楼层
MeteoInfo 发表于 2020-7-1 14:18
可以在循环里先将stdata上次增加的‘2T'列删除,然后再addcoldata增加新的’2T‘列。

stdata.delcol(' ...

解决了 太感谢了老师{:eb511:}{:eb511:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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