Seite 2 von 4
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 08:12
von __deets__
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?
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 08:12
von __blackjack__
@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?
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 13:40
von JohannX
__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?
Wie ich auf namedtuple gekommen bin ist mir Schleierhaft, konnte das Problem mittlerweile lösen.
Sorry dafür, dass ich noch ein Anfänger bin, werde hier keine Fragen mehr stellen
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 13:43
von __deets__
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?
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 14:23
von JohannX
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
Code: Alles auswählen
self.df_all = pd.read_csv(self.file_asc, skiprows=5, delimiter=";", converters={' DATA L': partial(int, base=16)})
Aber es erscheint diese Fehlermeldung
Code: Alles auswählen
ValueError: invalid literal for int() with base 16: ''
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 14:29
von __blackjack__
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: ''
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 15:03
von JohannX
So sieht z.B. solch eine asc file aus:
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;
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?
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 15:25
von Sirius3
Daran liegt es nicht, weil beide Zeilen gleich viele ; haben und keine leeren Zellen.
Du hast aber irgendwo in der Datei eine leere Zelle, also ein ;; .
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 15:31
von JohannX
Laut Notepad++ gibt es nichts mit ";;".
Sehr interessant
Re: xml und asc Files miteinander abgleichen
Verfasst: Mittwoch 31. Juli 2019, 16:01
von __blackjack__
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?
Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 11:47
von JohannX
__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?
Das `skipinitialspace`-Argument hast du nicht erwähnt meines Wissens nach.
Habe dieses gefunden:
Code: Alles auswählen
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
Liegt es quasi daran weil in den Zeilen AEx leere Zeilen gibt?
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)})
Und die asc Datei war:
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;
Und mit der anderen asc Datei geht das nicht?
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;
Mir ergibt sich einfach keine Logik

vielleicht denke ich auch Falsch?
Wäre das dann der Richtige Code den ich hinzufügen muss?
Bzw. mit
austauschen muss
Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 11:53
von JohannX
Ich nehm´s zurück! Hab´s hinbekommen

Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 11:58
von sparrow
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.
Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 13:00
von JohannX
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:
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"))
Das ist der neue Code:
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]))
Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 13:32
von sparrow
Ich würde schauen, ob self.ui.checkBox_1.isChecked() tatsächlich True ist (sonst wird kein Trace hinzugefügt) und schauen ob in time_Name_1 und values_Name_1 tatsächlich das drin steht, was du erwartest.
Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 13:58
von JohannX
Das sind die Ergebnisse
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
Checkbox ist True soweit ist hier kein Problem.
Wird dann also daran liegen dass keine Daten in den Variablen sind?
Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 14:03
von JohannX
Hier sind noch weitere Daten, wo ich auf Kontrolle ging:
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)
Ausgabe:
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
Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 14:18
von JohannX
Ich bin dem Rätsel auf der Spur!
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)
Das Ergebniss:
Code: Alles auswählen
Empty DataFrame
Columns: [Start Date, Time, Offset[s], ID, DATA H, DATA L, Unnamed: 6]
Index: []
Hier scheint es also, dass nichts vorhanden ist?
Edit: beim alten erscheint genau die selbe Meldung und da sind aber Daten im plotly erhalten!
Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 14:22
von sparrow
Was ist der Wert von self.list[0][2]?
Der Name ist übrigens schlecht gewählt, weil es das Schlüsselwort "list" überschreibt. Das verwirrt unnötig.
Re: xml und asc Files miteinander abgleichen
Verfasst: Donnerstag 1. August 2019, 14:57
von JohannX
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:
Code: Alles auswählen
values_Name_1 = df_Name_1["DATA L"].apply(lambda v: self.liste[0][1])
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:
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)})
Aber wenn ich den Code ausführe kommt diese Fehlermeldung:
Code: Alles auswählen
TypeError: can't multiply sequence by non-int of type 'float'