C'è un modo di alto livello a leggere in linee da un file di output e hanno i tipi riconosciuti dalla struttura dei contenuti?

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

  •  23-08-2019
  •  | 
  •  

Domanda

Supponiamo che io sono un file di output che voglio leggere ogni riga e stato creato unendo diversi tipi insieme, anteponendo e aggiungendo le parentesi graffe della lista,

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

Voglio leggere le righe in. Ora li posso leggere, e far funzionare sulla stringa per assegnare i valori e tipi, ma mi chiedevo se Python ha avuto un metodo di livello superiore per questo.

Dopo la costruzione di una funzione per fare questo ho cercato di trovare un approccio più alto livello, ma non ha trovato uno.

È stato utile?

Soluzione

Quello che state cercando è eval . Ma si prega di tenere a mente che questa funzione valuterà ed eseguire le linee. Quindi non eseguirlo su input non attendibile mai!

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

Se si ha il controllo lo script che genera il file di output, poi vorrei suggerire di usare json codifica. formato JSON è molto simile alla rappresentazione di stringa pitone di liste e dizionari. E sarà molto più sicuro e robusto da cui leggere.

>>> 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]}]

Altri suggerimenti

Il problema che si descrive è convenzionalmente indicato come serializzazione . JavaScript Object Notation (JSON) è una popolare protocollo di serializzazione.

Probabilmente sarebbe meglio per memorizzare i dati con un modulo come salamoia primo luogo, invece di usare le stringhe normali. In questo modo si evita un sacco di problemi che vengono con eval e ottenere una soluzione più robusta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top