es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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"])

Tags:  , ,

Answer

  1. Avatar for 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:

    import json
    
    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 = json.loads(f.read())
            print(contents["x"]) # puedes acceder a las claves del diccionario de esta manera
    

    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.

Comments are closed.