Hi,
ich habe eine cdv Datei die allerdings nur aus einer sehr langen Zeile besteht, ich würde aus dieser gerne einzelne Felder mittels regulärem Ausdruck extrahieren.
Die Datei hat folgenden Aufbau:
"Autoname":"BMW","Kosten":2000,"Farbe":"Gruen","Leistung",200,"Autoname":"VW","Kosten":1000,"Farbe":"Blau","Leistung",100
wie kann ich sämtliche Felder mit der Bezeichnung Autoname und dem Zusätzlichen Wert ausgeben lassen und zusätzlich die entsprechende Farbe mit angeben?
Vielen Dank im Voraus!!
Felder aus CSV extrahieren
Das sieht nicht nach CSV, sondern eher nach einer unvollständigen/defekten JSON-Datei (mit doppelten Schlüsseln) aus. Steht am Ende zwischen Leistung und 100 wirklich ein Komma, oder doch ein Doppelpunkt? Ich würde eher versuchen, das in ein bekanntes Format zu bringen und dann einen Parser dafür zu verwenden. Das Beispiel, das du gezeigt hast, kann man mit einem ganz kurzen regulären Ausdruck verarbeiten -- Das ist für echte Daten aber i.d.R. nicht stabil genug.
Edit: Gekürzt.
Edit: Gekürzt.
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
... und willkommen im Forum
Wer denkt sich denn so eine "Datenstruktur" aus? Wo hast du die Daten her?
RegEx ist IMHO nicht nötig, geht mit String-Methode. Z.B. so:
Gruß, noisefloor
... und willkommen im Forum
Wer denkt sich denn so eine "Datenstruktur" aus? Wo hast du die Daten her?
RegEx ist IMHO nicht nötig, geht mit String-Methode. Z.B. so:
Code: Alles auswählen
my_string = '"Autoname":"BMW","Kosten":2000,"Farbe":"Gruen","Leistung",200,"Autoname":"VW","Kosten":1000,"Farbe":"Blau","Leistung",100'
my_string = my_string.replace('"', '')
my_list = my_string.split(',')
for element in my_list:
if element.startswith('Autoname'):
_, marke = element.split(':')
print(marke)
elif element.startswith('Farbe'):
_, farbe = element.split(':')
print(' {}'.format(farbe))
@noisefloor: das geht nicht, sobald in den Werten Komma oder Doppelpunkt vorkommen. Dafür sind ja die Anführungszeichen da. Die Präfixe `my_` bei Deinen Variablennamen sind überflüssig, denn ich denke alle Variablen gehören Dir. `string` und `list` sind dann auch sehr generisch.
@thorsten97: wer schreibt die Datei? Gibt es eine Formatbeschreibung? Ohne diese zu kennen, kann man nur per Trial&Error raten, wie denn das Format genau gemeint ist. Vor allem, wie werden Anführungszeichen encodiert?
Am besten wäre es, das Programm, das die Datei schreibt, so abzuändern, dass es ein übliches Format verwendet.
@thorsten97: wer schreibt die Datei? Gibt es eine Formatbeschreibung? Ohne diese zu kennen, kann man nur per Trial&Error raten, wie denn das Format genau gemeint ist. Vor allem, wie werden Anführungszeichen encodiert?
Am besten wäre es, das Programm, das die Datei schreibt, so abzuändern, dass es ein übliches Format verwendet.
Für JSON fehlen ja wirklich nur die Klammern, die aus dem gezeigten Beispiel eine Liste mit zwei Dictionaries mit gleichen Schlüsseln machen würden. Und das Komma zwischen dem Schlüssel "Leistung" und dem Wert (an beiden Stellen!) ist natürlich auch verkehrt. Ich fürchte nur, dass in den echten Daten nicht so schön ordentlich immer die gleichen Schlüssel in der gleichen Reihenfolge stehen. @thorsten97: Du hast nicht etwa irgendwelche Klammern weggelassen, die in der Datei in Wirklichkeit stehen? Hast Du kopiert, abgeschrieben oder vereinfacht?nezzcarth hat geschrieben:Das sieht nicht nach CSV, sondern eher nach einer unvollständigen/defekten JSON-Datei (mit doppelten Schlüsseln) aus. Steht am Ende zwischen Leistung und 100 wirklich ein Komma, oder doch ein Doppelpunkt?