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?
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.
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.
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.
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.
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
.
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.
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.
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?
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
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 ... ?
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?
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. :-)
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"...
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.
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.