csv parsen kryptische Symbole

OP #7827614
Lesenswert?

Hallo, ich habe eine .csv file, welche ich mit python parsen möchte. Aber diese sieht (meiner Meinung nach) sehr komisch aus. Dort sind einige komische Symbole enthalten.

Das ganze kommt von einer Körperfettwaage. Das ist der Anfang

1
ÐÏà¡±á                >  þÿ                 X          þÿÿÿ    þÿÿÿ    W   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     òÌ        á  °Á    â   \ p Java Excel API v2.6.3                                                                                           B  äa   =  œ               ¯   ¼   =  h\:¾#8      X@        "       ·   Ú    1  È   ÿ      A r i a l 1  È   ÿ      A r i a l 1  È   ÿ      A r i a l 1  È   ÿ      A r i a l 1 . È   ÿ¼      T i m e s   N e w   R o m a n à      õÿ   ü        À à     õÿ   ü        À à     õÿ   ü        À à     õÿ   ü        À à     õÿ   ü        À à     õÿ   ü        À à      õÿ   ü        À à      õÿ   ü        À à      õÿ   ü        À à      õÿ   ü        À à      õÿ   ü        À à      õÿ   ü        À à      õÿ   ü        À à      õÿ   ü        À à      õÿ   ü        À à          |        À à   + õÿ   ü        À à   ) õÿ   ü        À à   , õÿ   ü        À à   * õÿ   ü        À à      õÿ   ü        À à        |        À “ €ÿ“ €ÿ“ €ÿ“ € ÿ“  € ÿ“ €ÿ`  …  Œ+    d a t a Œ   , ü  E  à   D a t u m   G e w i c h t  B M I 
2
 K ö r p e r f e t t  U n t e r h a u t f e t t g e w e b e  H e r z f r e q u e n z 
3
 H e r z - I n d e x  V i s z e r a l e s   F e t t  K ö r p e r w a s s e r   %  S k e l e t t m u s k u l a t u r   % 
4
 M u s k e l m a s s e  K n o c h e n m a s s e  P r o t e i n e  B M R  B i o l o g i s c h e s   A l t e r  2 2 : 5 8   1 8 / 0 8 / 2 0 2 4  9 4 . 9 k g  2 7 . 4  2 5 . 3 %  1 8 . 1 %  7 7 b p m 
5
 2 . 5 L / M i n / M ²  1 4 . 5  5 3 . 0 %  4 1 . 2 %  6 7 . 9 k g  2 . 9 k g  1 8 . 6 % 
6
 2 0 2 4 . 0 k c a l  3 9 . 0  0 6 : 4 0   1 9 / 0 8 / 2 0 2 4  9 3 . 1 k g  2 6 . 9  2 4 . 9 %  1 7 . 8 %  6 2 b p m 
7
 2 . 0 L / M i n / M ²  1 4 . 0  4 1 . 0 %  6 6 . 8 k g  3 . 1 k g  1 8 . 7 % 
8
 1 9 8 9 . 0 k c a l  0 5 : 5 4   2 6 / 0 8 / 2 0 2 4  9 2 . 2 k g  2 6 . 7  2 5 . 0 %  6 0 b p m 
9
 1 . 9 L / M i n / M ²  5 2 . 9 %  4 0 . 5 %  6 5 . 9 k g  3 . 2 k g 
10
 1 9 6 3 . 0 k c a l  4 0 . 0  0 5 : 4 2   3 0 / 0 8 / 2 0 2 4  9 0 . 8 k g  2 6 . 2  2 3 . 9 %  1 7 . 1 %  8 6 b p m 
11
 2 . 8 L / M i n / M ²  1 3 . 0  5 3 . 5 %  4 1 . 8 %  6 6 . 0 k g  1 9 . 2 %  3 6 . 0  0 7 : 2 7   3 1 / 0 8 / 2 0 2 4  9 0 . 9 k g  2 6 . 3  -   -  0 7 : 5 2   3 1 / 0 8 / 2 0 2 4  2 4 . 2 %  1 7 . 3 %  9 0 b p m

Und das der schluss

1
 h 
2
  O  ý 
3
 h     ý 
4
 i    ´  ý 
5
 i   µ  ý 
6
 i   7  ý 
7
 i   ¶  ý 
8
 i     ý 
9
 i   q  ý 
10
 i   r  ý 
11
 i    F  ý 
12
 i   %  ý 
13
 i     ¸   ý 
14
 i 
15
  ·  ý 
16
 i 
17
  ®  ý 
18
 i   “  ý 
19
 i 
20
  ?  ý 
21
 i   ¡   ý 
22
 j    ¸  ý 
23
 j   ¹  ý 
24
 j   º  ý 
25
 j   »  ý 
26
 j   ¼  ý 
27
 j   ½  ý 
28
 j   ¾  ý 
29
 j    ¿  ý 
30
 j      ý 
31
 j     &  ý 
32
 j 
33
  À  ý 
34
 j 
35
  ®  ý 
36
 j   Á  ý 
37
 j 
38
  Â  ý 
39
 j     ×  â    È Ò Ò Ò Ò Ò Ò Ò Ò Ò Ò > ¶    @   < d                    
40
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
41
   
42
      
43
                                                             !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   þÿÿÿH   I   J   K   L   M   N   þÿÿÿP   Q   R   S   T   U   V   þÿÿÿýÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR o o t   E n t r y                                               ÿÿÿÿÿÿÿÿ                                       þÿÿÿ        W o r k b o o k                                                      ÿÿÿÿÿÿÿÿ                                         Ž       S u m m a r y I n f o r m a t i o n                           (        ÿÿÿÿ                                    G           D o c u m e n t S u m m a r y I n f o r m a t i o n           8  ÿÿÿÿÿÿÿÿÿÿÿÿ                                    O

Man kann am Anfang zwar sehen, dass Die Daten dort drinne stehen, aber was ist das für ein Format, bzw. wie kann man das richtig parsen? Was sind das für Symbole?

#7827658
Lesenswert?

Frank E. schrieb:

Eine Maschine vom Hersteller A, die proprietäre Daten vom Hersteller B exportiert.

Mich wundert mehr dass er in seine eigenen Daten nicht rein sieht und statt dessen hier fragt. Da steht buchstäblich "Java Excel API v2.6.3" und "W o r k b o o k " drin. So schwer kann es doch nicht sein das zu lesen und auf die Idee zu kommen dass das Excel sein könnte.

(Firma: 1984now) #7827885
Lesenswert?

Frank E. schrieb:

Eine Maschine vom Hersteller A, die proprietäre Daten vom Hersteller B exportiert.

Auf die Idee muss man erstmal kommen. Als ob es keine allgemeingültigen Formate gäbe, wie eben z.B. "echtes" CSV.

Es gibt leider nicht wirklich ein echtes CSV. Es gibt vielmehr 'zig Tausend Varianten davon.

Gäbe es so ein CSV, würde ich dir ja Recht geben. Aber es gibt es halt nicht wirklich.

(Firma: Privat) #7827908
Lesenswert?

Für obiges mußt du viel Überlegung + Fleiß mitbringen und mit Reg. Ausdrücken und Stringfunktionen auseinander tüfteln. Das hier sind schon mal deine 15 Spalten. Um diese zu bekommen, mit Regex nach "Datum.*[0-9]{1,}" suchen.

1
D a t u m   G e w i c h t  B M I 
2
 K ö r p e r f e t t  U n t e r h a u t f e t t g e w e b e  H e r z f r e q u e n z 
3
 H e r z - I n d e x  V i s z e r a l e s   F e t t  K ö r p e r w a s s e r   %  S k e l e t t m u s k u l a t u r   % 
4
 M u s k e l m a s s e  K n o c h e n m a s s e  P r o t e i n e  B M R  B i o l o g i s c h e s   A l t e r

Da alles nur mit einem Leerzeichen getrennt ist, so auch das - und das %, mußt du erst mal suchen und ersetzen :

Das " - " suchen und ersetzen mit "-" Das " % " suchen und ersetzen mit "%"

Erst dann kannst du das Blank als Delimiter verwenden und die einzelnen Spalten rausfischen. Bei den eigentlichen Daten ist das dein Trenner :

1
2 2 : 5 8   1 8 / 0 8 / 2 0 2 4

Auch hierfür einen reg. Ausdruck machen :

1
 
2
"[0-9]{2}:[0-9]{2} [0-9]{2}/[0-9]{2}/[0-9]{4}"

evtl muß der Slash maskiert werden (je nach Sprache).

so ungefähr würde ich mal an die Sache rangehen, wenn es mit Excel nicht geht .

(Firma: Q3) #7827974
Lesenswert?

Ob S. schrieb:

Es gibt leider nicht wirklich ein echtes CSV. Es gibt vielmehr 'zig Tausend Varianten davon.

Es sind nur einige wenige Varianten, wenn man sich an die Bezeichnung hält. Was gibts denn bei CSV "comma separated values" großartig an Spielraum?

Komma ist eigentlich eindeutig. Ich weiss, dass in der Realität alles mögliche als Trennzeichen verwendet wird (z.B. Excel das Semikolon), nur dann ist es eben kein _C_SV.

Dann gibts noch die Variante, die einzelnen Werte in Anführungseichen oder Hochkommas zu setzen. Oder die Datei mit und ohne Spaltennamen.

Und beim Datensatz-Trenner/Zeilenwechsel permutiert das noch von CR, NL, CR-NL, NL-CR.

Ok, das sind schon einige, aber baerbock'sche "zig Tausende" sind es nun doch nicht.

(Firma: 1984now) #7827993
Lesenswert?

Frank E. schrieb:

Es sind nur einige wenige Varianten, wenn man sich an die Bezeichnung hält. Was gibts denn bei CSV "comma separated values" großartig an Spielraum?

Das fängt bereits an mit der Codierung des CSV-Textes. Allein dafür gibt es ja schon unzählige Möglichkeiten. Von 7-Bit-ASCII bis hin zu 32-Bit Unicode-Escapes. Das dann bis acht Bit in den Spielarten der diversen Codepages, oberhalb 8 Bit in den Spielarten mit BOM oder ohne BOM und einem durch nichts definierten Default in Abwesenheit eines BOM.

Begreifst du all diese Probleme?

Komma ist eigentlich eindeutig. Ich weiss, dass in der Realität alles mögliche als Trennzeichen verwendet wird (z.B. Excel das Semikolon)

Auch Excel werwendet brav das Komma, so lange es nicht gerade ein einer Lokalisierung läuft, in der das Komma halt als Dezimaltrenner reserviert ist. Ja, wir als Deutsche sind davon natürlich betroffen. Aber ganz sicher nicht als Einzige...

Begreifst du wenigstens dieses Problem?

Excel verwendet auch die Window-üblichen Zeilentrenner CRLF. Andere OS haben andere.

Auch ein Problem.

Dann gibts noch die Variante, die einzelnen Werte in Anführungseichen oder Hochkommas zu setzen. Oder die Datei mit und ohne Spaltennamen.

Das Quoting ist dann nochmal eine weitere Eskalation. Dabei ist im Wesentlichen das Problem: wie verhindert man, dass Feld- oder Zeilentrenner innerhalb von Feldern störend wirksam werden. Und soviel Formate durch das vorgenannte möglich sind, so viel Lösungen für das Problem gibt es auch. Nur eben keine einheitliche.

Capisce, honk?

OP #7828090
Lesenswert?

Heinz B. schrieb:

so ungefähr würde ich mal an die Sache rangehen, wenn es mit Excel nicht geht .

Wie Harald K. es auch schon erwähnt hat, hat sich das Problem erledigt. Es war eine Excel mit .csv-Endung (wurde so aber generiert). Ich habe es dann so gelöst, dass ich die Excel in csv convertiert habe und schon waren alle kryptische Symbole verschwunden.

Das suchen wäre sonst auch mein erster Ansatz gewesen. Man konnte ja schon erkennen, dass die Daten da drinn stehen. Aber ohne diese Symbole machte es das ganze wesentlich einfacher

(Firma: Q3) #7828091
Lesenswert?

Chandler B. schrieb:

Wie Harald K. es auch schon erwähnt hat, hat sich das Problem erledigt. Es war eine Excel mit .csv-Endung (wurde so aber generiert). Ich habe es dann so gelöst, dass ich die Excel in csv convertiert habe und schon waren alle kryptische Symbole verschwunden.

Ok, das ist jetzt die Frage, ob es sich noch lohnt, aber prinzipiell wäre es doch interesstant, mal herauszufinden, warum es die "kryptischen Symbole" überhaupt gibt bzw. was sie bedeuten.

Die haben die Entwickler doch sicher nicht nur erzeugt, um andere zu ärgern ... ?

#7828156
Lesenswert?

Chandler B. schrieb:

Wie Harald K. es auch schon erwähnt hat, hat sich das Problem erledigt. Es war eine Excel mit .csv-Endung (wurde so aber generiert).

Unter UNIXoiden Systemen gibt es üblicherweise einen Shellbefehl file(1), der in den Inhalt einer Datei schaut und einem dann mit einer hohen Trefferquote das Dateiformat sagen kann. Sich auf Dateinamenerweiterungen zu verlassen, ist eine Eigenart von Windows, die Nutzern dieses Systems mitunter auch schon böse auf die Füße gefallen ist -- zum Beispiel bei Mailanhängen mit Namen wie "Ich nackt.pdf .exe"...

#7828227
Lesenswert?

Ob S. schrieb:

Es gibt leider nicht wirklich ein echtes CSV. Es gibt vielmehr 'zig Tausend Varianten davon.

Na ja, da hast du um einige Nullen übertrieben.

Wenn man die Zeichensatzcodierung rausnimmt, weil die auch einfache Textdateien betrifft die die Grundlage von CSV darstellen, dann darf man zwar Trennzeichen und Escapezeichen umdefinieren, aber das erlauben auch die üblichen Reader, aber der Rest ist schon standardisiert.

Nicht jeder Reader erlaubt gequotetes, nicht jeder Reader erlaubt Zeilenwechsel im (dann gequoteten) Wert, aber wenn er das nicht erlaubt, braucht er das auch nicht.

(Firma: 1984now) #7829155
Lesenswert?

Michael B. schrieb:

Ob S. schrieb:

Es gibt leider nicht wirklich ein echtes CSV. Es gibt vielmehr 'zig Tausend Varianten davon.

Na ja, da hast du um einige Nullen übertrieben.

Wenn man die Zeichensatzcodierung rausnimmt

Ja, wenn's das Wörtchen wenn nicht wär...

Aber das gibt's nunmal. Genauso, wie es halt tatsächlich unzählige mögliche Varianten für Textcodierungen gibt.

Und da CSV auf Text aufsetzt, kannst du die Textcodierungsvarianten halt nicht "rausnehmen", sondern musst sie mit der Zahl der durch CSV-Freiheitgrade selber bedingten Varianten multiplizieren. Und dann ist "Tausende" für die Zahl der sich insgesamt ergebenden möglichen Varianten eben leider KEINE Übertreibung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren