Source code for sharppy.io.pecan_decoder

import numpy as np
import sharppy.sharptab.profile as profile
import sharppy.sharptab.prof_collection as prof_collection
from datetime import datetime, timedelta
from sharppy.io.decoder import Decoder
from sutils.utils import is_py3

try:
    from StringIO import StringIO
except ImportError:
    from io import BytesIO

__fmtname__ = "pecan"
__classname__ = "PECANDecoder"

[docs]class PECANDecoder(Decoder): def __init__(self, file_name): super(PECANDecoder, self).__init__(file_name) def _parse(self): file_data = self._downloadFile() file_profiles = file_data.split('\n\n\n') profiles = {} dates = [] date_init = None loc = None for m in file_profiles: try: prof, dt_obj, init_dt, member = self._parseSection(m) except Exception as e: # print(e) continue loc = prof.location # Try to add the profile object to the list of profiles for this member try: profiles[member] = profiles[member] + [prof] except Exception as e: profiles[member] = [prof] if not dt_obj in dates: dates.append(dt_obj) if date_init is None or init_dt < date_init: date_init = init_dt #print(profiles) prof_coll = prof_collection.ProfCollection(profiles, dates) if "MEAN" in list(profiles.keys()): prof_coll.setHighlightedMember("MEAN") prof_coll.setMeta('observed', False) prof_coll.setMeta('base_time', date_init) prof_coll.setMeta('loc', loc) return prof_coll def _parseSection(self, section): parts = section.split('\n') if ' F' in parts[1]: valid, fhr = parts[1].split(' F') fhr = int(fhr) else: valid = parts[1] fhr = 0 dt_obj = datetime.strptime(valid, 'TIME = %y%m%d/%H%M') member = parts[0].split('=')[-1].strip() location = parts[2].split('SLAT')[0].split('=')[-1].strip() headers = [ h.lower() for h in parts[4].split(", ") ] data = '\n'.join(parts[5:]) if not is_py3(): sound_data = StringIO(data) else: sound_data = BytesIO(data.encode()) prof_vars = np.genfromtxt( sound_data, delimiter=',', unpack=True) prof_var_dict = dict(zip(headers, prof_vars)) def maybe_replace(old_var, new_var): if old_var in prof_var_dict: prof_var_dict[new_var] = prof_var_dict[old_var] del prof_var_dict[old_var] maybe_replace('omga', 'omeg') maybe_replace('temp', 'tmpc') maybe_replace('dewp', 'dwpc') maybe_replace('uwin', 'u') maybe_replace('vwin', 'v') prof = profile.create_profile(profile='raw', location=location, date=dt_obj, missing=-999.0, **prof_var_dict) return prof, dt_obj, dt_obj - timedelta(hours=fhr), member
if __name__ == '__main__': prof_col = PECANDecoder("../../examples/data/ABR.txt") print(prof_col.getProfiles()) #file.getProfs()