-1
大規模な天気データ(約13000ファイル)を解析し、その結果をファイルに書き出します。問題のあるファイルを無視するようなコードを実装する方法はありますか?特定のファイルにエラーが発生した場合、このファイルをスキップして残りの部分を続行できますか? globのためのある種の例外?ファイルは.oax形式で、出力ファイルは.txtです。Pythonで複数ファイル解析のためのファイル例外を作成する方法
tryおよびexceptionコマンドを含める必要があるセグメントはどれですか?
import sharppy
import sharppy.sharptab.profile as profile
import sharppy.sharptab.interp as interp
import sharppy.sharptab.winds as winds
import sharppy.sharptab.utils as utils
import sharppy.sharptab.params as params
import sharppy.sharptab.thermo as thermo
import numpy as np
from StringIO import StringIO
import glob
import os
os.chdir('X:/ybbn_snding_data-oax/ybbn_snding_data-oax')
for file in glob.glob("*.oax"):
spc_file = open(file, 'r').read()
def parseSPC(spc_file):
## read in the file
data = np.array([l.strip() for l in spc_file.split('\n')])
## necessary index points
title_idx = np.where(data == '%TITLE%')[0][0]
start_idx = np.where(data == '%RAW%')[0] + 1
finish_idx = np.where(data == '%END%')[0]
## create the plot title
data_header = data[title_idx + 1].split()
location = data_header[0]
time = data_header[1][:11]
## put it all together for StringIO
full_data = '\n'.join(data[start_idx : finish_idx][:])
sound_data = StringIO(full_data)
## read the data into arrays
p, h, T, Td, wdir, wspd = np.genfromtxt(sound_data, delimiter=',', comments="%", unpack=True)
return p, h, T, Td, wdir, wspd
pres, hght, tmpc, dwpc, wdir, wspd = parseSPC(spc_file)
prof = profile.create_profile(profile='default', pres=pres, hght=hght, tmpc=tmpc, \
dwpc=dwpc, wspd=wspd, wdir=wdir, missing=-9999, strictQC=True)
msl_hght = prof.hght[prof.sfc] # Grab the surface height value
#print "SURFACE HEIGHT (m MSL):",msl_hght
agl_hght = interp.to_agl(prof, msl_hght) # Converts to AGL
#print "SURFACE HEIGHT (m AGL):", agl_hght
msl_hght = interp.to_msl(prof, agl_hght) # Converts to MSL
#print "SURFACE HEIGHT (m MSL):",msl_hght
sfcpcl = params.parcelx(prof, flag=1) # Surface Parcel
fcstpcl = params.parcelx(prof, flag=2) # Forecast Parcel
mupcl = params.parcelx(prof, flag=3) # Most-Unstable Parcel
mlpcl = params.parcelx(prof, flag=4) # 100 mb Mean Layer Parcel
print mupcl.bplus, "," # J/kg
print mupcl.bminus, "," # J/kg
print mupcl.lclhght, "," # meters AGL
print mupcl.lfchght, "," # meters AGL
print mupcl.elhght, "," # meters AGL
print mupcl.li5, "," # C
sfc = prof.pres[prof.sfc]
p3km = interp.pres(prof, interp.to_msl(prof, 3000.))
p6km = interp.pres(prof, interp.to_msl(prof, 6000.))
p1km = interp.pres(prof, interp.to_msl(prof, 1000.))
mean_3km = winds.mean_wind(prof, pbot=sfc, ptop=p3km)
sfc_6km_shear = winds.wind_shear(prof, pbot=sfc, ptop=p6km)
sfc_3km_shear = winds.wind_shear(prof, pbot=sfc, ptop=p3km)
sfc_1km_shear = winds.wind_shear(prof, pbot=sfc, ptop=p1km)
print utils.comp2vec(mean_3km[0], mean_3km[1])[1], ","
print utils.comp2vec(sfc_6km_shear[0], sfc_6km_shear[1])[1], ","
srwind = params.bunkers_storm_motion(prof)
#print "Bunker's Storm Motion (right-mover) [deg,kts]:", utils.comp2vec(srwind[0], srwind[1])
#print "Bunker's Storm Motion (left-mover) [deg,kts]:", utils.comp2vec(srwind[2], srwind[3])
srh3km = winds.helicity(prof, 0, 3000., stu = srwind[0], stv = srwind[1])
srh1km = winds.helicity(prof, 0, 1000., stu = srwind[0], stv = srwind[1])
print srh3km[0], ","
stp_fixed = params.stp_fixed(sfcpcl.bplus, sfcpcl.lclhght, srh1km[0], utils.comp2vec(sfc_6km_shear[0], sfc_6km_shear[1])[1])
ship = params.ship(prof)
eff_inflow = params.effective_inflow_layer(prof)
ebot_hght = interp.to_agl(prof, interp.hght(prof, eff_inflow[0]))
etop_hght = interp.to_agl(prof, interp.hght(prof, eff_inflow[1]))
print ebot_hght, ","
print etop_hght, ","
effective_srh = winds.helicity(prof, ebot_hght, etop_hght, stu = srwind[0], stv = srwind[1])
print effective_srh[0], ","
ebwd = winds.wind_shear(prof, pbot=eff_inflow[0], ptop=eff_inflow[1])
ebwspd = utils.mag(ebwd[0], ebwd[1])
print ebwspd, ",a"
scp = params.scp(mupcl.bplus, effective_srh[0], ebwspd)
stp_cin = params.stp_cin(mlpcl.bplus, effective_srh[0], ebwspd, mlpcl.lclhght, mlpcl.bminus)
#print "Supercell Composite Parameter:", scp
#print "Significant Tornado Parameter (w/CIN):", stp_cin
#print "Significant Tornado Parameter (fixed):", stp_fixed
f = open('nonstormdayvalues.txt','a')
a=str(mupcl.bplus)
f.write(a)
f.write(",")
b=str(mupcl.bminus)
f.write(b)
f.write(",")
c=str(mupcl.lclhght)
f.write(c)
f.write(",")
d=str(mupcl.elhght)
f.write(d)
f.write(",")
e=str(mupcl.li5)
f.write(e)
f.write(",")
g=str(utils.comp2vec(mean_3km[0], mean_3km[1])[1])
f.write(g)
f.write(",")
h=str(utils.comp2vec(sfc_6km_shear[0], sfc_6km_shear[1])[1])
f.write(h)
f.write(",")
i=str(srh3km[0])
f.write(i)
f.write(",")
j=str(ebot_hght)
f.write(j)
f.write(",")
k=str(etop_hght)
f.write(k)
f.write(",")
l=str(effective_srh[0])
f.write(l)
f.write(",")
m=str(ebwspd)
f.write(m)
f.write(",a")
f.close
に継続ループでこれを使用することができます。好奇心の外に、この質問はあまりにも一般的であるために下落したと思いますか? SOルールのより良いハングアップをしようとしています。 –
あなたの質問の枠組みは間違っています。それは、ファイルを解析する際にエラーが発生したようなものでなければなりません。あなたの質問はあまりにも曖昧です – Harwee
それがあなたのために働いた場合、答えを受け入れることを忘れないでください、歓声。 – Harwee