Ich analysiere eine große Reihe von Wetterdaten (etwa 13000 Dateien) und schreibe die Ergebnisse in eine Datei. Gibt es eine Möglichkeit, den unten stehenden Code so zu implementieren, dass er problematische Dateien ignoriert, das heißt, wenn eine bestimmte Datei einen Fehler erzeugt, kann ich diese Datei überspringen lassen und mit dem Rest fortfahren? Eine Art Ausnahme für Glob? Dateien sind im .oax-Format und die Ausgabedatei ist .txt.So erstellen Sie eine Dateiausnahme für die Analyse mehrerer Dateien in Python
Um welche Segmente müsste ich die Befehle try und exception hinzufügen?
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
Ja Schleife weiter, ich werde versuchen, dass. Nur aus Neugier, wurde diese Frage für zu allgemein abgelehnt, denkst du? Ich versuche nur, die SO-Regeln besser zu verstehen. –
Die Art und Weise, wie Sie die Frage formuliert haben, ist falsch. Es sollte sein, als hätte ich einen Fehler beim Parsen der Datei, wie kann ich das ausschließen? Ihre Frage ist zu vage – Harwee
Vergessen Sie nicht, die Antwort zu akzeptieren, wenn es für Sie arbeitete, Prost. – Harwee