txt texto partir lista importar guardar ejercicios ejemplo diccionarios diccionario datos crear como archivos python file dictionary external

texto - lista de diccionarios python



Python: crea un diccionario a partir de texto/archivo que está en formato de diccionario (6)

Aunque no me gusta mucho usar eval . Puede resultar en problemas de seguridad si no tiene control total sobre el archivo de entrada. Solo importa tu diccionario y json usando el módulo json o pickle .

Me gustaría crear un diccionario a partir de un archivo de texto que tengo, cuyos contenidos están en formato ''diccionario''. Aquí hay una muestra de lo que contiene el archivo:

{''fawn'': [1], ''sermersheim'': [3], ''sonji'': [2], ''scheuring'': [2]}

Es exactamente esto, excepto que contiene 125,000 entradas. Puedo leer en el archivo de texto usando read (), pero crea una variable del texto literal del archivo, incluso cuando inicializo la variable con

dict = {}


No es una solución lista para producción y puede que no funcione bien con un archivo de su tamaño, pero si necesita una forma simple y puede anteponer el archivo a

my_dict = {''fawn'': [1], ''sermersheim'': [3], ''sonji'': [2], ''scheuring'': [2]}

luego puede cambiarle el nombre a un archivo python y simplemente importar

from my_file import my_dict


Puedes usar el eval integrado. 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 solo un gran diccionario (incluso en varias líneas), puede hacer esto:

with open(''myfile.txt'',''r'') as inf: dict_from_file = eval(inf.read())

Esta es probablemente la forma más sencilla 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á 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 va a tener el módulo ast ni a las declaraciones. El código se verá más así:

inf = open(''myfile.txt'',''r'') dict_from_file = eval(inf.read()) inf.close()

No olvides llamar a inf.close() . La belleza de las declaraciones es que lo hacen por usted, incluso si el bloque de código en la declaración with genera una excepción.


Usa la función eval .

Por ejemplo,

dict = eval(open("yourfile.txt").read())


Usar eval podría ser peligroso. Si json no funciona, entonces recomiendo usar yaml que parece funcionar bien con su entrada de ejemplo:

>>> import yaml >>> yaml.load("{''fawn'': [1], ''sermersheim'': [3], ''sonji'': [2], ''scheuring'': [2]}") {''fawn'': [1], ''scheuring'': [2], ''sermersheim'': [3], ''sonji'': [2]}


Esto me parece json. Usa el módulo json si es así.

Esto me parece yaml. Utilice el módulo pyyaml si es así. (Según lo sugerido por @jcollado).

No puede usar el módulo json porque es estricto con respecto a su entrada.