From addb064f71e7b48f1971be0d3d3a079996bc4d53 Mon Sep 17 00:00:00 2001 From: Leon Teichroeb Date: Sun, 24 Oct 2021 14:25:14 +0200 Subject: [PATCH] Moved CSV save function. --- main.py | 2 +- src/user_interface.py | 17 ++++------------- src/utility.py | 21 ++++++++++++++++++++- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/main.py b/main.py index 479cc45..8b0f60e 100644 --- a/main.py +++ b/main.py @@ -13,7 +13,7 @@ import src.csv_logging as log from src.magnetometer import MagnetometerProxy from src.user_interface import HelmholtzGUI from src.socket_control import SocketInterfaceThread -from src.utility import ui_print +from src.utility import ui_print, save_dict_list_to_csv def program_start(): diff --git a/src/user_interface.py b/src/user_interface.py index fa237dc..4358d43 100644 --- a/src/user_interface.py +++ b/src/user_interface.py @@ -27,7 +27,7 @@ import src.config_handling as config import src.csv_logging as log from src.calibration import AmbientFieldCalibration, CoilConstantCalibration, MagnetometerCalibration from src.exceptions import DeviceAccessError -from src.utility import ui_print +from src.utility import ui_print, save_dict_list_to_csv import src.helmholtz_cage_device as helmholtz_cage_device # define font styles: @@ -845,7 +845,7 @@ class CalibrateAmbientField(Frame): ui_print("Error: Failed to export non-existent calibration data.") return - self.save_to_csv('coil_constant_calibration.csv', self.coil_constant_raw_data) + save_dict_list_to_csv('coil_constant_calibration.csv', self.coil_constant_raw_data, query_path=True) ui_print("Saved calibration results to coil_constant_calibration.csv.") def save_to_csv_ambient_field(self): @@ -853,19 +853,9 @@ class CalibrateAmbientField(Frame): ui_print("Error: Failed to export non-existent calibration data.") return - self.save_to_csv('ambient_field_calibration.csv', self.ambient_field_raw_data) + save_dict_list_to_csv('ambient_field_calibration.csv', self.ambient_field_raw_data, query_path=True) ui_print("Saved calibration results to ambient_field_calibration.csv.") - def save_to_csv(self, filename, data): - with open(filename, mode='w', newline='') as csv_file: - fieldnames = data[0].keys() - csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=',', quotechar='"', - quoting=csv.QUOTE_NONNUMERIC) - - csv_writer.writeheader() - for row in data: - csv_writer.writerow(row) - def save_and_apply_ambient_calibration(self): if self.ambient_field_result is not None: ui_print("Saving ambient field calibration data") @@ -886,6 +876,7 @@ class CalibrateAmbientField(Frame): ui_print("Reinitializing devices...") g.CAGE_DEVICE.reconnect_hardware_async() # setup everything with the defaults + class CalibrateMagnetometer(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) diff --git a/src/utility.py b/src/utility.py index fcdd592..d03e536 100644 --- a/src/utility.py +++ b/src/utility.py @@ -1,4 +1,5 @@ -from tkinter import END +import csv +from tkinter import filedialog import src.globals as g @@ -13,3 +14,21 @@ def ui_print(*content): else: # if window is not open, do normal print print(output) + + +def save_dict_list_to_csv(filename, data, query_path=False): + """Creates a csv file under the specified path containing one row for each dict in the list 'data'. + The file receives a header containing the keys of the first dict entry. + Each dict should use the same keys.""" + if query_path: + filename = filedialog.asksaveasfilename(initialfile=filename, title="Select csv save location...", + filetypes=(("CSV", "*.csv"),)) + + with open(filename, mode='w', newline='') as csv_file: + fieldnames = data[0].keys() + csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=',', quotechar='"', + quoting=csv.QUOTE_NONNUMERIC) + + csv_writer.writeheader() + for row in data: + csv_writer.writerow(row) \ No newline at end of file