def create_filename_parser(self, base_dir): # just in case a writer needs more complex file patterns # Set a way to create filenames if we were given a pattern if base_dir and self.file_pattern: file_pattern = os.path.join(base_dir, self.file_pattern) else: file_pattern = self.file_pattern return parser.Parser(file_pattern) if file_pattern else None
def create_filename_parser(self, base_dir): """Create a :class:`trollsift.parser.Parser` object for later use.""" # just in case a writer needs more complex file patterns # Set a way to create filenames if we were given a pattern if base_dir and self.file_pattern: file_pattern = os.path.join(base_dir, self.file_pattern) else: file_pattern = self.file_pattern return parser.Parser(file_pattern) if file_pattern else None
def __init__(self, filename): self.latitudes = None self.longitudes = None if filename.endswith('.h5'): prefix = filename.strip('.h5') self.h5_filename = filename self.nc_filename = os.path.basename(filename).replace('.h5', '.nc') elif filename.endswith('.hdf'): prefix = filename.strip('.hdf') self.h5_filename = filename self.nc_filename = os.path.basename(filename).replace( '.hdf', '.nc') else: self.h5_filename = None self.nc_filename = filename prefix = filename.strip('.nc') self.temp = None self.skin_temp = None self.topo = None self.shape_2d = (0, 0) self.time_shape = (0, ) self.shape = (0, 0, 0, 0) self.tdew = None self.qspec = None self.pres = None self.ozone = None # Location of profile as a string e.g. as in 'N1578;W04600' self.locations = None piasi = parser.Parser(iasi_file_pattern) items = piasi.parse(os.path.basename(prefix)) self.start_time = items['start_time'] if 'end_time' in items: self.end_time = items['end_time'] else: self.end_time = self.start_time + timedelta(seconds=15 * 60) self.platform_name = PLATFORMS.get(items['platform_name'], items['platform_name']) self.time_origo = datetime(2000, 1, 1) if self.h5_filename: self._load() else: self._loadnc()
def get_lrit_filenames(scene, area_name): """Get the set of lrit filenames for the given scene """ conf = ConfigParser() conf.read(os.path.join(CONFIG_PATH, scene.fullname + ".cfg")) filename = conf.get(scene.instrument_name + "-level4", "filename", raw=True, vars=os.environ) directory = conf.get(scene.instrument_name + "-level4", "dir", vars=os.environ) pathname_tmpl = os.path.join(directory, filename) LOG.debug("Path = " + str(pathname_tmpl)) fparser = parser.Parser(pathname_tmpl) lrit_files = glob( parser.globify(pathname_tmpl, {'nominal_time': scene.time_slot})) prologue = None segmfiles = [] segm_numbers = [] for item in lrit_files: p__ = fparser.parse(item) segm = p__['segment'].strip('_') if segm == 'PRO': prologue = item else: segm_numbers.append(int(segm)) segmfiles.append(item) if not prologue: LOG.warning("No prologue file found for timeslot") segm_numbers.sort() if range(1, 11) == segm_numbers: LOG.info("All ten segment files found") else: LOG.warning("Less than 10 segments found: %s", str(segm_numbers)) return prologue, segmfiles
def read_from_lrit(self, filenames, gribfilename=None): """Read and concatenate the LRIT segments""" self._lritfiles = filenames if len(filenames) == 0: print("No files provided!") return if gribfilename: self._store_grib = True self._gribfilename = gribfilename else: self._store_grib = False self._gribfilename = tempfile.mktemp(suffix='.grb') p__ = parser.Parser(LRIT_PATTERN) bstr = {} nsegments = 0 for lritfile in self._lritfiles: if os.path.basename(lritfile).find('PRO') > 0: print("PRO file... %s: Skip it..." % lritfile) continue res = p__.parse(os.path.basename(lritfile)) segm = int(res['segment'].strip('_')) if not self.timeslot: self.timeslot = res['nominal_time'] LOG.debug("Segment = %d", segm) nsegments = nsegments + 1 with open(lritfile) as fpt: fpt.seek(103) bstr[segm] = fpt.read() fstr = bstr[1] for idx in range(2, nsegments + 1): fstr = fstr + bstr[idx] with open(self._gribfilename, 'wb') as fpt: fpt.write(fstr) self.readgrib()