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:
parent
a5b49e99f7
commit
f04868b712
@ -89,27 +89,36 @@ 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
|
||||
|
||||
# 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(
|
||||
filepath,
|
||||
skiprows=skip_rows,
|
||||
nrows=end_row - skip_rows - 1 if end_row > skip_rows else None,
|
||||
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',
|
||||
@ -120,7 +129,8 @@ class CSVVisualizer:
|
||||
'Coulomb_Eff(%)': 'float32',
|
||||
'Cycle': 'int32'
|
||||
},
|
||||
on_bad_lines='warn'
|
||||
na_values=['', ' ', 'NaN', 'N/A', 'NA', 'None'],
|
||||
skip_blank_lines=True
|
||||
)
|
||||
|
||||
# Bereinige die Daten
|
||||
@ -129,6 +139,9 @@ class CSVVisualizer:
|
||||
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')
|
||||
]
|
||||
|
||||
# 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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user