def main(): filename = None if len(sys.argv) != 2: error("Usage: bin/python metfilelib/scripts/" "metfile_to_csv_for_sobek <metfile>") filename = os.path.abspath(sys.argv[1]) if not os.path.exists(filename): error("{} does not exist.".format(filename)) file_object = FileReader(filename) metfile = parse_metfile(file_object) if file_object.errors: error("\n".join(unicode(e) for e in file_object.errors)) for series in metfile.series: for profile in series.profiles: line = profile.line for measurement in profile.sorted_measurements: print( "{profile},{dist},{z}".format( profile=profile.description, dist=line.distance_to_midpoint(measurement.point), z=max(measurement.z1, measurement.z2), ) )
def parse(self, check_only=False): self.error_config = ( errors.ErrorConfiguration(self.project, None, self.mtype())) parsed_metfile = parse_metfile(self.file_object) if parsed_metfile is None: # File is not a MET file. Returned empty successful result. return specifics.SuccessfulParserResult(()) measurements = [] if self.file_object.errors: # There were errors, record them for error in self.file_object.errors: self.record_error( error.line, error.error_code, error.error_message) self.check_content(parsed_metfile) # Save the measured profiles. for series in parsed_metfile.series: for profile in series.profiles: scheduled_measurement = ( self.get_scheduled_measurement(profile)) if scheduled_measurement is None: continue m, created = models.Measurement.objects.get_or_create( scheduled=scheduled_measurement) m.date = profile.date_measurement m.data = [{ 'x': float(measurement.x), 'y': float(measurement.y), 'type': measurement.profile_point_type, 'top': measurement.z1, 'bottom': measurement.z2 } for measurement in profile.sorted_measurements ] if len(m.data) > 0: # Use x, y of first point m.the_geom = Point( m.data[0]['x'], m.data[0]['y'], srid=models.SRID) m.save() scheduled_measurement.complete = True scheduled_measurement.save() measurements.append(m) return self._parser_result(measurements)
def retrieve(metfile, profile_id): """Return the given profile_id from the metfile found at path 'metfile', and information on the series it was in, in the format of a 3 element tuple: (series_id, series_name, profile_object) """ met = parser.parse_metfile(file_reader.FileReader( metfile, skip_empty_lines=True)) for series in met.series: for profile in series.profiles: if profile.id == profile_id: return series.id, series.name, profile
def main(): parser = argparse.ArgumentParser( description="Read a MET file, and print errors or a copy of the MET file.") parser.add_argument("filename") filename = parser.parse_args().filename if not os.path.exists(filename) or not os.path.isfile(filename): print "File does not exist: {0}.".format(filename) elif not filename.endswith(".met"): print "File is not a .met file: {0}.".format(filename) else: file_reader = FileReader(filename, skip_empty_lines=True) metfile = parse_metfile(file_reader) if not file_reader.success: print "Errors." elif metfile is None: print "Apparently the MET parser decided this was not a MET file." else: exporter = MetfileExporter() print exporter.export_metfile(metfile)