From d2f275c49fe85ed659b75b952c4ed09eeb49a636 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Mon, 19 Feb 2024 16:44:37 +0100 Subject: [PATCH] Results: Add export function. --- src/View/Results/Window.py | 57 +++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/View/Results/Window.py b/src/View/Results/Window.py index a1b4d086..662db395 100644 --- a/src/View/Results/Window.py +++ b/src/View/Results/Window.py @@ -17,6 +17,7 @@ # -*- coding: utf-8 -*- import os +import csv import logging from datetime import datetime @@ -284,7 +285,8 @@ class ResultsWindow(PamhyrWindow): # Action actions = { "action_reload": self._reload, - "action_add": self._add_custom_plot + "action_add": self._add_custom_plot, + "action_export": self.export, } for action in actions: @@ -564,3 +566,56 @@ class ResultsWindow(PamhyrWindow): self._button_first.setEnabled(True) self._button_last.setEnabled(True) self._button_play.setIcon(self._icon_start) + + def export(self): + self.file_dialog( + select_file=False, + callback=lambda d: self.export_to(d[0]) + ) + + def export_to(self, directory): + for reach in self._results.river.reachs: + self.export_reach(reach, directory) + + def export_reach(self, reach, directory): + name = reach.name + name = name.replace(" ", "-") + + file_name = os.path.join( + directory, + f"reach_{name}.csv" + ) + + with open(file_name, 'w', newline='') as csvfile: + writer = csv.writer(csvfile, delimiter=',', + quotechar='|', quoting=csv.QUOTE_MINIMAL) + writer.writerow(["name", "kp", "data-file"]) + for profile in reach.profiles: + p_file_name = os.path.join( + directory, + f"cs_{profile.geometry.id}.csv" + ) + + writer.writerow([ + profile.name, + profile.kp, + p_file_name + ]) + + self.export_profile(reach, profile, p_file_name) + + def export_profile(self, reach, profile, file_name): + with open(file_name, 'w', newline='') as csvfile: + writer = csv.writer(csvfile, delimiter=',', + quotechar='|', quoting=csv.QUOTE_MINIMAL) + + writer.writerow(["timestamp", "z", "q"]) + for profile in reach.profiles: + timestamps = self._results.get("timestamps") + + for ts in timestamps: + writer.writerow([ + ts, + profile.get_ts_key(ts, "Z"), + profile.get_ts_key(ts, "Q"), + ]) -- GitLab