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:
|
try:
|
||||||
# Lese nur Datenzeilen (ignoriere Kommentare und leere Zeilen)
|
# Finde die Start- und Endzeilen der Daten
|
||||||
skip_rows = 0
|
skip_rows = 0
|
||||||
with open(filepath, 'r') as f:
|
end_row = None
|
||||||
for line in f:
|
|
||||||
if line.startswith('Time(s)'):
|
|
||||||
break
|
|
||||||
skip_rows += 1
|
|
||||||
|
|
||||||
# Bestimme die letzte Datenzeile (ignoriere alles nach '# TEST SUMMARY')
|
|
||||||
with open(filepath, 'r') as f:
|
with open(filepath, 'r') as f:
|
||||||
lines = f.readlines()
|
lines = f.readlines()
|
||||||
end_row = len(lines)
|
|
||||||
for i, line in enumerate(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
|
end_row = i
|
||||||
break
|
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(
|
self.df = pd.read_csv(
|
||||||
filepath,
|
StringIO(data_str),
|
||||||
skiprows=skip_rows,
|
names=['Time(s)', 'Voltage(V)', 'Current(A)', 'Phase',
|
||||||
nrows=end_row - skip_rows - 1 if end_row > skip_rows else None,
|
'Discharge_Capacity(Ah)', 'Charge_Capacity(Ah)',
|
||||||
|
'Coulomb_Eff(%)', 'Cycle'],
|
||||||
dtype={
|
dtype={
|
||||||
'Time(s)': 'float32',
|
'Time(s)': 'float32',
|
||||||
'Voltage(V)': 'float32',
|
'Voltage(V)': 'float32',
|
||||||
@ -120,7 +129,8 @@ class CSVVisualizer:
|
|||||||
'Coulomb_Eff(%)': 'float32',
|
'Coulomb_Eff(%)': 'float32',
|
||||||
'Cycle': 'int32'
|
'Cycle': 'int32'
|
||||||
},
|
},
|
||||||
on_bad_lines='warn'
|
na_values=['', ' ', 'NaN', 'N/A', 'NA', 'None'],
|
||||||
|
skip_blank_lines=True
|
||||||
)
|
)
|
||||||
|
|
||||||
# Bereinige die Daten
|
# Bereinige die Daten
|
||||||
@ -129,6 +139,9 @@ class CSVVisualizer:
|
|||||||
self.file_label.config(text=os.path.basename(filepath))
|
self.file_label.config(text=os.path.basename(filepath))
|
||||||
self.status_var.set(f"Daten geladen: {len(self.df)} Messungen")
|
self.status_var.set(f"Daten geladen: {len(self.df)} Messungen")
|
||||||
self.update_plot()
|
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:
|
except Exception as e:
|
||||||
messagebox.showerror("Fehler", f"Fehler beim Laden:\n{str(e)}")
|
messagebox.showerror("Fehler", f"Fehler beim Laden:\n{str(e)}")
|
||||||
@ -237,7 +250,17 @@ class CSVVisualizer:
|
|||||||
('SVG Vector', '*.svg')
|
('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"
|
default_filename = "adalm1000_plot.png"
|
||||||
|
else:
|
||||||
|
default_filename = "adalm1000_plot.png"
|
||||||
|
|
||||||
filepath = filedialog.asksaveasfilename(
|
filepath = filedialog.asksaveasfilename(
|
||||||
title="Grafik speichern",
|
title="Grafik speichern",
|
||||||
initialfile=default_filename,
|
initialfile=default_filename,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user