¿Hay una manera de alto nivel para leer en las líneas de un archivo de salida y tienen los tipos reconocidos por la estructura de los contenidos?

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

  •  23-08-2019
  •  | 
  •  

Pregunta

Supongamos que tengo un archivo de salida que quiero leer y cada línea fue creada por la unión de varias tipos juntos, anteponiendo y anexar los apoyos de la lista,

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

quiero leer las líneas en. Ahora puedo leerlos en, y operar sobre la cuerda para asignar valores y tipos, pero me preguntaba si Python tenía un método de alto nivel para esto.

Después de construir una función para ello he tratado de encontrar un enfoque de mayor nivel, pero no encontró ninguno.

¿Fue útil?

Solución

Lo que se busca es eval . Pero por favor, tenga en cuenta que esta función será evaluar y ejecutar las líneas. Así que no ejecutarlo en la entrada no es de confianza nunca!

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

Si usted tiene control sobre el script que genera el archivo de salida, entonces le sugiero que utilice json codificación. formato JSON es muy similar a la representación de cadena pitón de listas y diccionarios. Y será mucho más seguro y robusto para leer.

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

Otros consejos

El problema que usted describe se denomina convencionalmente serialización . JavaScript Object Notation (JSON) es un protocolo de serialización popular.

Probablemente sería mejor para almacenar los datos con un módulo como salmuera en el primer lugar, en lugar de utilizar cadenas normales. De esta manera se evita un montón de problemas que vienen con eval y obtener una solución más robusta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top