¿Cómo puedo convertir el contenido de un archivo en un diccionario?
Tengo una función que quiero usar para abrir archivos .dat y extraer datos de ellos, pero el problema es que no sé cómo convertir esos datos de nuevo en un diccionario para almacenarlo en una variable. Actualmente, los datos en los archivos se almacenan de la siguiente manera: “{"x":0,"y":1}
” (usa solo una línea del archivo, que es la estructura normal de un diccionario).
A continuación se muestra la función donde abro el archivo .dat e intento extraer cosas de él.
def openData():
file = fd.askopenfile(filetypes=[("Data",".dat"),("All Files",".*")])
filepath = file.name
if file is None:
return
with open(filepath,"r") as f:
contents = dict(f.read())
print(contents["x"]) # supongamos que hay una clave llamada "x" en ese diccionario
Este es el error que obtengo: (no porque la clave “x” no esté en el diccionario, confía en mí)
Exception in Tkinter callback
Traceback (most recent call last):
File "...\AppData\Local\Programs\Python\Python39\lib\tkinter_<em>init.py", line 1892, in _<em>call</em>
return self.func(*args)
File "...\PycharmProjects[este proyecto]\main.py", line 204, in openData
contents = dict(f.read())
ValueError: dictionary update sequence element #0 has length 1; 2 is required
Proceso finalizado con código de salida 0
Actualización: Intenté usar json y funcionó, gracias a @match
def openData():
file = fd.askopenfile(filetypes=[("Data",".dat"),("All Files",".*")])
filepath = file.name
if file is None:
return
with open(filepath,"r") as f:
contents = dict(json.load(f))
print(contents["x"])
davy.ai
Para convertir los datos del archivo .dat de nuevo en un diccionario, puedes utilizar el módulo json. A continuación se muestra cómo puedes modificar tu código para lograr esto:
Primero, necesitas importar el módulo json. Luego, puedes utilizar la función
loads
para convertir los datos de cadena en el archivo .dat en un diccionario. Finalmente, puedes acceder a las claves del diccionario como de costumbre, utilizando corchetes cuadrados con el nombre de la clave.