CSVVisualizer.py aktualisiert

Der Standard-Dateiname wird jetzt vom ursprünglichen CSV-Dateinamen abgeleitet:

    Wenn eine Datei geladen wurde (self.file_label nicht "Keine Datei ausgewählt" ist)

    Wird die .csv-Erweiterung durch .png ersetzt

    Beispiel: battery_test_20250710_193945_3.csv → battery_test_20250710_193945_3.png
(D)
This commit is contained in:
Jan 2025-07-10 20:05:05 +02:00
parent a5b49e99f7
commit f04868b712

View File

@ -89,46 +89,59 @@ class CSVVisualizer:
)
try:
# Lese nur Datenzeilen (ignoriere Kommentare und leere Zeilen)
# Finde die Start- und Endzeilen der Daten
skip_rows = 0
with open(filepath, 'r') as f:
for line in f:
if line.startswith('Time(s)'):
break
skip_rows += 1
# Bestimme die letzte Datenzeile (ignoriere alles nach '# TEST SUMMARY')
end_row = None
with open(filepath, 'r') as f:
lines = f.readlines()
end_row = len(lines)
for i, line in enumerate(lines):
if line.startswith('# TEST SUMMARY'):
if line.startswith('Time(s)'):
skip_rows = i
elif line.startswith('# TEST SUMMARY') and end_row is None:
end_row = i
break
self.df = pd.read_csv(
filepath,
skiprows=skip_rows,
nrows=end_row - skip_rows - 1 if end_row > skip_rows else None,
dtype={
'Time(s)': 'float32',
'Voltage(V)': 'float32',
'Current(A)': 'float32',
'Phase': 'str',
'Discharge_Capacity(Ah)': 'float32',
'Charge_Capacity(Ah)': 'float32',
'Coulomb_Eff(%)': 'float32',
'Cycle': 'int32'
},
on_bad_lines='warn'
)
# Bereinige die Daten
self.clean_data()
self.file_label.config(text=os.path.basename(filepath))
self.status_var.set(f"Daten geladen: {len(self.df)} Messungen")
self.update_plot()
# Wenn wir die Header-Zeile gefunden haben
if skip_rows > 0:
# Lese die Daten manuell und bereinige sie
data_lines = []
for line in lines[skip_rows+1:end_row if end_row else len(lines)]:
# Überspringe Kommentarzeilen und leere Zeilen
if line.strip() and not line.startswith('#'):
data_lines.append(line)
# Erstelle einen StringIO-Objekt für pandas
from io import StringIO
data_str = '\n'.join(data_lines)
self.df = pd.read_csv(
StringIO(data_str),
names=['Time(s)', 'Voltage(V)', 'Current(A)', 'Phase',
'Discharge_Capacity(Ah)', 'Charge_Capacity(Ah)',
'Coulomb_Eff(%)', 'Cycle'],
dtype={
'Time(s)': 'float32',
'Voltage(V)': 'float32',
'Current(A)': 'float32',
'Phase': 'str',
'Discharge_Capacity(Ah)': 'float32',
'Charge_Capacity(Ah)': 'float32',
'Coulomb_Eff(%)': 'float32',
'Cycle': 'int32'
},
na_values=['', ' ', 'NaN', 'N/A', 'NA', 'None'],
skip_blank_lines=True
)
# Bereinige die Daten
self.clean_data()
self.file_label.config(text=os.path.basename(filepath))
self.status_var.set(f"Daten geladen: {len(self.df)} Messungen")
self.update_plot()
else:
messagebox.showerror("Fehler", "Keine gültigen Daten in der Datei gefunden")
self.status_var.set("Keine gültigen Daten")
except Exception as e:
messagebox.showerror("Fehler", f"Fehler beim Laden:\n{str(e)}")
@ -237,7 +250,17 @@ class CSVVisualizer:
('SVG Vector', '*.svg')
]
default_filename = "adalm1000_plot.png"
# Standard-Dateiname aus dem geladenen CSV-Dateinamen ableiten
if hasattr(self, 'file_label'):
current_file = self.file_label.cget("text")
if current_file != "Keine Datei ausgewählt":
# Entferne .csv Erweiterung und füge .png hinzu
default_filename = os.path.splitext(current_file)[0] + ".png"
else:
default_filename = "adalm1000_plot.png"
else:
default_filename = "adalm1000_plot.png"
filepath = filedialog.asksaveasfilename(
title="Grafik speichern",
initialfile=default_filename,