17 Stimmen

Parsen einer Zeichenkette, die eine Liste von Tupeln darstellt

Ich habe Saiten, die wie diese aussehen:

"(8, 12.25), (13, 15), (16.75, 18.5)"

und ich möchte jeden von ihnen in eine Python-Datenstruktur konvertieren. Vorzugsweise eine Liste (oder Tupel) von Tupeln, die ein Paar von Float-Werten enthalten.

Das könnte ich tun mit eval("(8, 12.25), (13, 15), (16.75, 18.5)") was mir ein Tupel von Tupeln liefert, aber ich glaube nicht, dass die naive Auswertung externer Informationen eine kluge Entscheidung wäre.

Deshalb habe ich mich gefragt, wie eine elegante pythonische Lösung aussehen könnte.

26voto

nosklo Punkte 204121
>>> import ast
>>> print ast.literal_eval("(8, 12.25), (13, 15), (16.75, 18.5)")
((8, 12.25), (13, 15), (16.75, 18.5))

4voto

def parse(s):
    tuples = s.split('), ')
    out = []
    for x in tuples:
        a,b = x.strip('()').split(', ')
        out.append((float(a),float(b)))
    return out

sollte dies die Aufgabe erfüllen.

2voto

Ned Batchelder Punkte 342778

Ich habe die safe_eval in der Vergangenheit für derartige Jobs.

1voto

Edan Maor Punkte 9446

Wenn Sie mit einer CSV-Datei arbeiten und mehr wollen als die "naive" Lösung, die keine Fehler behandelt, sind Sie wahrscheinlich am besten mit dem Das CSV-Modul von Python .

1voto

inklesspen Punkte 1096

Herunterladen PyParsing .

Ich habe bereits damit gearbeitet. Sie können einige ziemlich robuste Parsing-Verhalten aus ihm heraus zu bekommen, und ich denke, es bietet builtins, die Ihre gesamte Parsing-Bedürfnisse mit dieser Art von Sache behandeln wird. Schauen Sie sich commaSeparatedList und nestedExpr.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X