Puede utilizar el eval
incorporado. Por ejemplo, esto funcionaría si cada entrada del diccionario está en una línea diferente:
dicts_from_file = []
with open('myfile.txt','r') as inf:
for line in inf:
dicts_from_file.append(eval(line))
# dicts_from_file now contains the dictionaries created from the text file
Alternativamente, si el archivo es sólo un gran diccionario (incluso en varias líneas), se puede hacer esto:
with open('myfile.txt','r') as inf:
dict_from_file = eval(inf.read())
Esta es probablemente la manera más simple de hacerlo, pero no es la más segura. Como otros mencionaron en sus respuestas, eval
tiene algunos riesgos de seguridad inherentes. La alternativa, como lo menciona JBernardo, es usar ast.literal_eval
, que es mucho más seguro que eval, ya que solo evaluará las cadenas que contienen literales. Simplemente puede reemplazar todas las llamadas a eval
en los ejemplos anteriores con ast.literal_eval
después de importar el módulo ast
.
Si está utilizando Python 2.4 no tendrá el módulo ast
, y no va a tener with
declaraciones. El código se parecerá más a esto:
inf = open('myfile.txt','r')
dict_from_file = eval(inf.read())
inf.close()
No se olvide de llamar inf.close()
. La belleza de las declaraciones with
es que lo hacen por usted, incluso si el bloque de código en la declaración with
genera una excepción.
'ast.literal_eval' – JBernardo
@JBernardo 1 como Mientras tenga Python 2.6 o más reciente, ese es el camino a seguir. El módulo 'ast' se introdujo en 2.5, pero no tenía las funciones auxiliares (como' literal_eval'). Esos llegaron en 2.6. –
@JBernardo, la mejor respuesta – dzhioev