xml und asc Files miteinander abgleichen
Die offizielle Dokumentation ist unseriös? Abertausende Programmierer haben damit erfolgreich namedtuples eingesetzt. Bei dir Klappt’s nicht, und dann liegt es an allem, aber nicht an dir? Welche Formulierung in dieser unbrauchbaren Dokumentation hat denn deinen Glauben befeuert, ein namedtuple wäre eine Liste?
- __blackjack__
- User
- Beiträge: 14047
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@JohannX: Mal davon abgesehen das Du wahrscheinlich kein Python 3.3 mehr einsetzt und damit eine etwas aktuellere Version der Python-Dokumentation hättest wählen sollen, ist der zweite Link auf jeden Fall brauchbar, der sagt nämlich alles was man zu `namedtuple()` wissen muss, inklusive Codebeispielen. Naja, fast alles: Es fehlt natürlich alles was nach Python 3.3 noch dazu gekommen ist. Wovon aber nichts wichtiges für das Grundverständnis und Deinen Code dabei ist.
Nur weil man etwas `liste` nennt, wird es keine. Bei ``vier = 23; eins = 42; print(vier + eins)`` erwartest Du ja hoffentlich auch nicht das da 5 ausgegeben wird. Und wenn es denn eine Liste wäre, wo hättest Du denn dann `append()` aufgerufen um etwas an diese vermeintliche Liste anzuhängen?
Nur weil man etwas `liste` nennt, wird es keine. Bei ``vier = 23; eins = 42; print(vier + eins)`` erwartest Du ja hoffentlich auch nicht das da 5 ausgegeben wird. Und wenn es denn eine Liste wäre, wo hättest Du denn dann `append()` aufgerufen um etwas an diese vermeintliche Liste anzuhängen?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Wie ich auf namedtuple gekommen bin ist mir Schleierhaft, konnte das Problem mittlerweile lösen.__deets__ hat geschrieben: Mittwoch 31. Juli 2019, 08:12 Die offizielle Dokumentation ist unseriös? Abertausende Programmierer haben damit erfolgreich namedtuples eingesetzt. Bei dir Klappt’s nicht, und dann liegt es an allem, aber nicht an dir? Welche Formulierung in dieser unbrauchbaren Dokumentation hat denn deinen Glauben befeuert, ein namedtuple wäre eine Liste?
Sorry dafür, dass ich noch ein Anfänger bin, werde hier keine Fragen mehr stellen
Das du Anfaenger bist ist kein Grund sich zu entschuldigen. Das du anderen Leuten die Schuld dafuer gibst, dass *DU* etwas missverstanden hast hingegen ist was anderes. *Dafuer* kannst du dich entschuldigen. Musst du nicht. Aber wenn du deinem Frust freien Lauf laesst, dann darf ich das wohl auch, oder?
Gut
Es ist halt für mich sehr erdrückend wenn man 2 Tage vor dem gleichen Problem sitzt!
Eine Frage hätte ich noch, dann sollte es funktionieren.
Und zwar es soll ein Hexa Wert auf Dezimal Wert umgerechnet werden.
Diesen Code hatte ich schon beim letzten Programm verwendet und das asc file hat sich vom Aufbau nicht geändert, nur sind halt andere Werte vorhanden
Aber es erscheint diese Fehlermeldung

Es ist halt für mich sehr erdrückend wenn man 2 Tage vor dem gleichen Problem sitzt!
Eine Frage hätte ich noch, dann sollte es funktionieren.
Und zwar es soll ein Hexa Wert auf Dezimal Wert umgerechnet werden.
Diesen Code hatte ich schon beim letzten Programm verwendet und das asc file hat sich vom Aufbau nicht geändert, nur sind halt andere Werte vorhanden
Code: Alles auswählen
self.df_all = pd.read_csv(self.file_asc, skiprows=5, delimiter=";", converters={' DATA L': partial(int, base=16)})
Code: Alles auswählen
ValueError: invalid literal for int() with base 16: ''
- __blackjack__
- User
- Beiträge: 14047
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Da ist offenbar in der Spalte '<ein paar Leerzeichen>DATA L' mindestens eine leere Zeichenkette enthalten. Und nichts kann man nicht in eine Zahl umwandeln:
Code: Alles auswählen
In [1]: int('', base=16)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-7e47a351e148> in <module>
----> 1 int('', base=16)
ValueError: invalid literal for int() with base 16: ''
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
So sieht z.B. solch eine asc file aus:
Man kann hier erkennen, dass eine Zeile kürzer ist. Daran wird der Fehler liegen.
Dachte dass mit dem delimiter=";" das soweit getrennt wird und somit kein Problem darstellen sollte...
Jetzt muss ich quasi mit ner for-Schleife Zeile für Zeile durchgehen und alle Zeilen löschen welche AEx enthalten oder? Außer es gibt ne andere Lösung?
Code: Alles auswählen
Start Date; Time; Offset[s]; ID; DATA H; DATA L;
27.03.2019;17:18:26;000000000.001000;AEx;00000000;20F76D2;
27.03.2019;17:18:26;000000000.001300;2200000x;700017E9;20F76D2;
Dachte dass mit dem delimiter=";" das soweit getrennt wird und somit kein Problem darstellen sollte...
Jetzt muss ich quasi mit ner for-Schleife Zeile für Zeile durchgehen und alle Zeilen löschen welche AEx enthalten oder? Außer es gibt ne andere Lösung?
- __blackjack__
- User
- Beiträge: 14047
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Naja eben ein ';' direkt gefolgt von einem Zeilenende weil es sich um die letzte Spalte handelt. Ein bisschen Nachdenken…
Das `skipinitialspace`-Argument von `pandas.read_csv()` hatte ich glaube ich schon mal erwähnt, oder?
Das `skipinitialspace`-Argument von `pandas.read_csv()` hatte ich glaube ich schon mal erwähnt, oder?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Das `skipinitialspace`-Argument hast du nicht erwähnt meines Wissens nach.__blackjack__ hat geschrieben: Mittwoch 31. Juli 2019, 16:01 Naja eben ein ';' direkt gefolgt von einem Zeilenende weil es sich um die letzte Spalte handelt. Ein bisschen Nachdenken…
Das `skipinitialspace`-Argument von `pandas.read_csv()` hatte ich glaube ich schon mal erwähnt, oder?
Habe dieses gefunden:
Code: Alles auswählen
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
Ich versteh den Fehler leider nicht ganz.
Code: Alles auswählen
ValueError: invalid literal for int() with base 16: ''
Diesen Code habe ich beim vorherigen Projekt genommen:
Code: Alles auswählen
self.df_all = pd.read_csv(self.file_asc, skiprows=5, delimiter=";", converters={' DATA L': partial(int, base=16)})
Code: Alles auswählen
Start Date; Time; Offset[s]; ID; DATA H; DATA L;
09.07.2019;13:35:24;000000000.002400;2200000x;20F76D2;00000000;
09.07.2019;13:35:24;000000000.002700;9900011x;20F76D2;000009EA;
Code: Alles auswählen
Start Date; Time; Offset[s]; ID; DATA H; DATA L;
27.03.2019;17:18:26;000000000.001000;AEx;00000000;20F76D2;
27.03.2019;17:18:26;000000000.001300;2200000x;700017E9;20F76D2;

Code: Alles auswählen
skipinitialspace = True
Bzw. mit
Code: Alles auswählen
converters={' DATA L': partial(int, base=16)})
Skipinitialspace hat nichts mit deinem Problem zu tun. In der Dokumentation steht doch, dass damit die Leerzeichen nach dem Trenner ignoriert werden. Das verwendet man, damit Spalten und Werte vernünftig dargestellt werden. Eine beliebige Anzahl von Leerzeichen vor der Spaltenbezeichnung ist nicht nur unschön sondern auch fehleranfällig.
Was genau verstehst du denn an der Fehlermeldung nicht? Du versucht ein leere Zeichenkette in eine Zahl umzuwandeln. Das funktioniert natürlich nicht. Die Werte in deiner Datei sind durch Semikolon getrennt. Du willst den 6. Wert aus den Zeilen haben. Dann sag mir mal den 6. Wert aus der 2. Datenzeile deiner nicht funktionierenden Datei.
Was genau verstehst du denn an der Fehlermeldung nicht? Du versucht ein leere Zeichenkette in eine Zahl umzuwandeln. Das funktioniert natürlich nicht. Die Werte in deiner Datei sind durch Semikolon getrennt. Du willst den 6. Wert aus den Zeilen haben. Dann sag mir mal den 6. Wert aus der 2. Datenzeile deiner nicht funktionierenden Datei.
Ich hab das dann eh soweit verstanden, hab nur 10min mehr gebraucht.
Jetzt läuft der Code mal soweit durch, ohne dass Fehlermeldung kommen
Jetzt habe ich nur mehr ein Problem mit dem plotly und dann sollte es soweit sein
Es wird ein html File exportiert und automatisch im Browser geöffnet, doch anscheinend sind keine Daten vorhanden, der Code ist quasi der selbe vom vorherigen Projekt, bei dem hat es allerdings funktioniert.
Das ist der Code vom vorherigen Projekt:
Das ist der neue Code:
Jetzt läuft der Code mal soweit durch, ohne dass Fehlermeldung kommen

Jetzt habe ich nur mehr ein Problem mit dem plotly und dann sollte es soweit sein

Es wird ein html File exportiert und automatisch im Browser geöffnet, doch anscheinend sind keine Daten vorhanden, der Code ist quasi der selbe vom vorherigen Projekt, bei dem hat es allerdings funktioniert.
Das ist der Code vom vorherigen Projekt:
Code: Alles auswählen
self.fig = go.Figure()
# Das Layout für das Diagramm erstellen
self.fig.update_layout(title = go.layout.Title(text = file_title, xref = "paper", x = 0),
xaxis = go.layout.XAxis(title = go.layout.xaxis.Title(text = "Second [s]", font = dict(family = "Courier New, monospace", size = 20, color = "#7f7f7f"))),
yaxis = go.layout.YAxis(title=go.layout.yaxis.Title(text = "Values", font = dict(family = "Courier New, monospace", size = 20, color = "#7f7f7f"))))
# Fügt ubatlogger zum Diagramm hinzu
if self.ui.ubatlogger.isChecked():
self.fig.add_trace(go.Scatter(x = time_ubatlogger, y = values_ubatlogger, mode = "lines", name = "Ubatlogger"))
Code: Alles auswählen
self.fig = go.Figure()
# Das Layout für das Diagramm erstellen
self.fig.update_layout(title = go.layout.Title(text = file_title, xref = "paper", x = 0),
xaxis = go.layout.XAxis(title = go.layout.xaxis.Title(text = "Second [s]", font = dict(family = "Courier New, monospace", size = 20, color = "#7f7f7f"))),
yaxis = go.layout.YAxis(title=go.layout.yaxis.Title(text = "Values", font = dict(family = "Courier New, monospace", size = 20, color = "#7f7f7f"))))
if self.ui.checkBox_1.isChecked():
self.fig.add_trace(go.Scatter(x = time_Name_1, y = values_Name_1, mode = "lines", name = self.list[0][0]))
Das sind die Ergebnisse
Checkbox ist True soweit ist hier kein Problem.
Wird dann also daran liegen dass keine Daten in den Variablen sind?
Code: Alles auswählen
time_Name_1 = df_Name_1["Offset[s]"]
print(time_Name_1)
values_Name_1 = df_Name_1["DATA L"].apply(lambda v: self.list[0][1])
print(values_Name_1)
if self.ui.checkBox_1.isChecked():
print("Checkbox is True")
Code: Alles auswählen
Series([], Name: Offset[s], dtype: float64)
Series([], Name: DATA L, dtype: object)
Checkbox is True
Wird dann also daran liegen dass keine Daten in den Variablen sind?
Hier sind noch weitere Daten, wo ich auf Kontrolle ging:
Ausgabe:
Code: Alles auswählen
self.df_all = pd.read_csv(self.file_asc, skiprows=5, delimiter=";", skipinitialspace = True, converters={' DATA L': partial(int, base=16)})
print(self.df_all)
Code: Alles auswählen
Start Date Time Offset[s] ID DATA H DATA L Unnamed: 6
0 27.03.2019 17:18:26 0.0010 AEx 00000000 20F76D2 NaN
1 27.03.2019 17:18:26 0.0013 2200000x 700017E9 20F76D2 NaN
2 27.03.2019 17:18:26 0.0016 DD00011x 8002019E 20F76D2 NaN
3 27.03.2019 17:18:26 0.0019 DD00011x 8002019E 20F76D2 NaN
4 27.03.2019 17:18:26 0.0045 1100001x 800A7229 20F76D2 NaN
... ... ... ... ... ... ... ...
627503 27.03.2019 17:18:26 2536.6235 1100001x 800A7229 20F76D2 NaN
627504 27.03.2019 17:18:26 2536.6238 1100001x 800A7279 00000002 NaN
627505 27.03.2019 17:18:26 2536.6241 1100001x 800A7319 00000002 NaN
627506 27.03.2019 17:18:26 2536.6244 1100001x 800A73B9 00000002 NaN
627507 27.03.2019 17:18:26 2536.6296 DD00011x 8002019E 20F76D2 NaN
[627508 rows x 7 columns]
Empty DataFrame
Ich bin dem Rätsel auf der Spur!
Das habe ich als Code hinzugefügt:
Das Ergebniss:
Hier scheint es also, dass nichts vorhanden ist?
Edit: beim alten erscheint genau die selbe Meldung und da sind aber Daten im plotly erhalten!
Das habe ich als Code hinzugefügt:
Code: Alles auswählen
df_Name_1 = self.df_all[self.df_all["DATA H"] == self.list[0][2]]
print(df_Name_1)
Code: Alles auswählen
Empty DataFrame
Columns: [Start Date, Time, Offset[s], ID, DATA H, DATA L, Unnamed: 6]
Index: []
Edit: beim alten erscheint genau die selbe Meldung und da sind aber Daten im plotly erhalten!
Gut, also ich weiß schon wo der Fehler liegt, sollte auch in der Richtigen Spalte nachschauen
Nun wird geplotet
Eine kleine Sache wäre da noch, dann klapp´s bestimmt!
Bei diesem Code:
ist bei lambda v folgender Wert enthalten:
Beim ploten glaubt plotly also dass das schon der gegebene Wert ist, aber dieser Wert soll mit dem Wert welcher in der asc File geben ist Berechnet werden!
Ein Wert in dieser Tabelle "DATA L" ist z.B: 000000DF
Und genau dieser Wert 000000DF wird ja mit diesem Code in decimal umgerechnet:
Aber wenn ich den Code ausführe kommt diese Fehlermeldung:

Nun wird geplotet

Eine kleine Sache wäre da noch, dann klapp´s bestimmt!
Bei diesem Code:
Code: Alles auswählen
values_Name_1 = df_Name_1["DATA L"].apply(lambda v: self.liste[0][1])
Code: Alles auswählen
v*(5/1024)*9.980487805
Ein Wert in dieser Tabelle "DATA L" ist z.B: 000000DF
Und genau dieser Wert 000000DF wird ja mit diesem Code in decimal umgerechnet:
Code: Alles auswählen
self.df_all = pd.read_csv(self.file_asc, skiprows=5, delimiter=";", skipinitialspace = True, converters={' DATA L': partial(int, base=16)})
Code: Alles auswählen
TypeError: can't multiply sequence by non-int of type 'float'