2017-09-18 2 views
0

Ich habe eine komplexe Zeichenfolge mit einem verschachtelten Wörterbuch darin. Dieses Wörterbuch enthält außerdem eine Liste von drei ähnlichen Wörterbüchern. Wie konvertiere ich das in ein Python-Wörterbuch? Bitte helfen Sie.Extrahieren verschachtelten Python-Wörterbuch aus komplexen Zeichenfolge

Eingang: 'name: "data dict" id: 2\nv6: false\nstats {\n hosts {\n cnt1: 256\n cnt2: 0\n }\n groups {\n cnt1: 1\n cnt2: 0\n }\n main_groups {\n cnt1: 1\n cnt2: 0\n }\n main_hosts {\n cnt1: 256\n cnt2: 0\n }\n}\n group_id: "None"'

Erwartetes Ergebnis: { name: "data dict", id: 2, v6: false, stats: { hosts: { cnt: 1, cnt: 2 } groups: { cnt: 1, cnt: 2 } main: { cnt: 1, cnt: 2 } main_hosts: { cnt: 1, cnt: 2 } } }

+3

Wie ist diese Saite entstanden ??? Das sieht so aus, als ob es irgendwann ein JSON hätte sein können. Wahrscheinlich am einfachsten zu reparieren, was auch immer dieses Chaos zu extrahieren ist, um die gültige JSON zu extrahieren ... –

+1

Ich glaube nicht, dass ich eine 'Regex' verwenden würde. Ich bin ein Fan von ['pyparsing'] (http://pyparsing.wikispaces.com/) für solche Aufgaben. –

+0

können Sie die Zeichenfolge formatiert zeigen, sieht aus wie ein Yaml, dann yaml Modul wird Konvertierung – Serge

Antwort

1

Wie TS erwähnt, gibt es eine Zeichenfolge mit einem verschachtelten Wörterbuch (erste Mal, dass ich es als eine implizite Bezugnahme auf Gültigkeit zu interpretieren). Wenn der String Inhalt gültig JSON ist, können Sie verwenden json Einbau-Paket alles, was Sie brauchen, um es zu analysieren, umfasst:

import json 
data = json.loads(your_string) 

Lesen Sie mehr in JSON package docs.

Wenn nicht, können Sie einen regulären Ausdruck schreiben oder das pyparsing-Paket verwenden, um diese Zeichenfolge zu verarbeiten.

+0

Das funktioniert nicht, weil die ursprüngliche Zeichenkette nicht richtig formatiert ist json – user3354059

+0

Schau nochmal, das wird nicht funktionieren ... die Zeichenkette ist nicht gültig JSON –

+0

Es ist kein gültiger JSON, hast du es überhaupt versucht es? – dawg

0

Mit einigen Bearbeitung Ihrer Eingabe kann es von yaml geladen werden und das Datenobjekt ist, wie Sie es angefordert haben, eine Reihe von verschachtelten Wörterbüchern. Wie wurde die Eingabezeichenfolge erstellt? Die spezifischen Bearbeitungen sind:

  • "data dict" change-ID: "auf "Daten dict" \ NID:"
  • change "\ n group_id" bis "\ ngroup_id"
  • Alle ändern {to :,
  • alles entfernen}.
Verwandte Themen