如何在Python中为多文件分析创建文件异常

时间:2016-05-20 03:08:54

标签: python exception glob

我正在分析大量天气数据(大约13000个文件)并将结果写入文件。有没有办法以这样的方式实现我下面的代码,它将忽略有问题的文件,也就是说,如果一个特定的文件产生错误,我可以让它跳过这个文件并继续其余的吗? glob的某种异常?文件采用.oax格式,输出文件为.txt。

我需要在哪些段中包含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

1 个答案:

答案 0 :(得分:1)

使用

try:
    #run something
    #if some file is a bad file/ operation not allowed
    #raises exception
except Exception as e:
    #print e
    #or do something else if error raised

如果出现一些错误,你可以在循环中使用它,除了并继续循环