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?

Code: Alles auswählen

skipinitialspace = True
Wäre das dann der Richtige Code den ich hinzufügen muss?
Bzw. mit

Code: Alles auswählen

converters={'  DATA L': partial(int, base=16)})
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 8)
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 :lol:
Nun wird geplotet 8)

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:

Code: Alles auswählen

v*(5/1024)*9.980487805
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'