Forum: PC-Programmierung csv parsen kryptische Symbole


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Chandler B. (chandler)


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?

von Jens K. (jensky)


Lesenswert?

das ist keine csv. Das sieht man schon am Aufbau!

von Harald K. (kirnbichler)


Lesenswert?

Benenne die Datei mal in *.xls um und sieh, was dann Dein Excel davon 
hält ...

von Andras H. (andras_h)


Lesenswert?

Java Excel API v2.6.3
https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.3/

A Java library for reading/writing Excel Files

von Rüdiger B. (rbruns)


Lesenswert?

Das ist eher ein Word oder ähnliches.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Cool.

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.

von Hannes J. (Firma: _⌨_) (pnuebergang)


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.

von Chandler B. (chandler)


Lesenswert?

Harald K. schrieb:
> Benenne die Datei mal in *.xls um und sieh, was dann Dein Excel davon
> hält ...

Excel hält viel davon :)

Vielen Dank.

von Franko S. (frank_s866)


Lesenswert?

Eine Körperfettwage die so ein fettes Format rausschreibt. LOL

von Andras H. (andras_h)


Lesenswert?

Franko S. schrieb:
> Eine Körperfettwage die so ein fettes Format rausschreibt. LOL

Vielleicht wenn man fett ist, wird Excel generiert. Wenn man dann 
abnimmt, dann CSV.

von Ob S. (Firma: 1984now) (observer)


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.

von Heinz B. (Firma: Privat) (hbrill)


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
.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Heinz B. schrieb:
> Für obiges mußt du viel Überlegung + Fleiß mitbringen und mit Reg.
> Ausdrücken und Stringfunktionen auseinander tüfteln.

Du, das Problem ist schon längst gelöst.


Das ist keine CSV-Datei, das ist eine Excel-Datei, nur mit falscher 
Erweiterung.

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

oh, sorry hatte ich glatt übersehen.
Dann kann der Admin meinen Beitrag löschen.

von Frank E. (Firma: Q3) (qualidat)


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.

von Ob S. (Firma: 1984now) (observer)


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?

von Chandler B. (chandler)


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

von Frank E. (Firma: Q3) (qualidat)


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 ... ?

von Harald K. (kirnbichler)


Lesenswert?

Frank E. schrieb:
> aber prinzipiell
> wäre es doch interesstant, mal herauszufinden, warum es die "kryptischen
> Symbole" überhaupt gibt bzw. was sie bedeuten.

Das ist das Excel-Dateiformat. Hast Du jetzt wirklich die Frage 
gestellt, warum es das Dateiformat gibt, bzw. warum es "kryptische 
Zeichen" enthält?

von Ein T. (ein_typ)


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.

Daß auf dieser Körperfettwaage anscheinend eine Java-VM zu laufen 
scheint, finde ich sogar noch ein bisschen erschütternder. :-)

von Ein T. (ein_typ)


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"...

von Michael B. (laberkopp)


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.

von Ob S. (Firma: 1984now) (observer)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.