Gibt es einen High-Level-Weg in den Zeilen von einer Ausgabedatei zu lesen und haben die durch die Struktur der Inhalte erkannt Typen?

StackOverflow https://stackoverflow.com/questions/900396

  •  23-08-2019
  •  | 
  •  

Frage

Angenommen, ich habe eine Ausgabedatei, die ich und jede Zeile erstellt wurde, lesen will durch verschiedene Arten miteinander zu verbinden, das Voranstellen und Anhänge der Liste Klammern,

[('tupleValueA','tupleValueB'), 'someString', ('anotherTupleA','anotherTupleB')]

Ich möchte in die Zeilen lesen. Jetzt kann ich sie in, lesen und auf der Saite arbeitet Werte und Typen zuweisen, aber ich frage mich, ob Python eine höhere Methode dafür hatte.

eine Funktion Nach dem Bau, dies zu tun habe ich versucht, einen höheren Ansatz zu finden, aber nicht einen gefunden habe.

War es hilfreich?

Lösung

Was Sie suchen ist eval . Aber bitte beachten Sie, dass diese Funktion bewerten und die Linien auszuführen. So läuft nicht auf nicht vertrauenswürdige Eingaben überhaupt!

>>> print eval("[('tupleValueA', 1), 'someString']")
[('tupleValueA', 1), 'someString']

Wenn Sie die Kontrolle über das Skript, das die Ausgabedatei erzeugt, dann würde ich vorschlagen, dass Sie verwenden json Codierung. JSON-Format ist sehr ähnlich wie die Python-String-Darstellung von Listen und Wörterbücher. Und wird viel sicherer und robust sein, von zu lesen.

>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> json.loads('["foo", {"bar": ["baz", null, 1.0, 2]}]')
["foo", {"bar": ["baz", null, 1.0, 2]}]

Andere Tipps

Das Problem, das Sie beschreiben, wird üblicherweise bezeichnet als Serialisierung . JavaScript Object Notation (JSON) ein beliebtes Serialisierung Protokoll ist.

Wahrscheinlich wäre es besser, die Daten zu speichern mit einem Modul wie Gurke der erste Platz, statt normale Strings zu verwenden. Auf diese Weise können viele Probleme vermeiden, die mit eval kommen und eine robustere Lösung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top