2016-08-12 7 views
2

Objekt I mit einer Anwendung bin stecken, diePython: String [[k1: v1, k2: v2], [k3: v3]]

[[_type:logs, _id:AVY0ofxOHiyEPsw_vkZS, _index:firewall-all-2016.07.29, _score:13.445344], [_type:logs, _id:AVY1EI1z79siNC3TEi7P, _index:firewall-all-2016.07.29, _score:13.445344]] 

folgenden Ausgänge würde Ich mag diesen Text analysieren in ein iterierbares Objekt. Aber der Standardansatz mit ast.literal_eval mag die Eingabe nicht.

Gibt es etwas, was ich versuchen kann, bevor ich etc str ersetzen suchen Start in ...

Danke

+0

Das Problem mit 'eval()' ist, dass die Zeichenfolgen nicht in Anführungszeichen eingeschlossen sind. Sie können mit 3 'replace()' Funktionen bekommen, was Sie wollen. Ist das nicht akzeptabel für dich? –

Antwort

1

Wie wäre es damit:

import re 

data = "[[_type:logs, _id:AVY0ofxOHiyEPsw_vkZS, _index:firewall-all-2016.07.29, _score:13.445344], [_type:logs, _id:AVY1EI1z79siNC3TEi7P, _index:firewall-all-2016.07.29, _score:13.445344]]" 

parsed_1 = re.findall("\[(.*?)\]", data[1:-1]) 

parsed_list = [] 
for line in parsed_1: 
    parsed_dict = {} 
    for record in line.split(","): 
     k, v = record.split(":") 
     parsed_dict[k] = v 
    parsed_list.append(parsed_dict) 

print(parsed_list) 

Die Ausgabeliste der Wörterbücher ist, Sie können auf viele Arten darüber hinwegsehen.

Verwandte Themen