Python - Rescatar diccionarios de un txt

 
Vista:
sin imagen de perfil
Val: 46
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Rescatar diccionarios de un txt

Publicado por Juan (14 intervenciones) el 26/02/2021 14:26:03
Buenas a todos. Tengo una duda que no consigo solucionar.
Me han enviado un txt con diccionarios donde analizo el agua. Adjunto un ejemplo ilustrativo:

1
2
3
4
{"Aguas":"Mar","Propiedades":{"Nit":0.781,"Ox":1.1,"P":30}} #NoError
{"Aguas":"Mar","Propiedades":{"Nit":1.5,"Ox":8.2,"P":2.2}} #NoError
{"Aguas":"Mar","Propiedades":{"Nit":1.5,"Error":{"Tipo":467}}} #Error
{"Aguas":"Mar","Propiedades":{"Nit":0,"Ox":10,"P":0.17}} #NoError

A veces el análisis es erróneo y da error, pero el caso es que me gustaría recuperar esos diccionarios que están en un txt. para poder luego manipularlos.
Alguna sugerencia?
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Rescatar diccionarios de un txt

Publicado por joel (901 intervenciones) el 27/02/2021 10:24:31
Hola Juan, no entiendo muy bien a que te refieres... que quieres decir con recuperarlos, en leerlos del archivo txt?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Rescatar diccionarios de un txt

Publicado por Juan (14 intervenciones) el 28/02/2021 20:33:36
Sí, me explico.
Tengo un txt con esos diccionarios. En el txt simplemente son cadenas, ya que pues el archivo de texto no reconoce si algo es una lista, un diccionario, etc.
Entonces a mí me gustaría que al utilizar Python de alguna forma pueda leer ese texto como diccionarios, es decir, que con Python pueda reconocer cuál es la clave, cuál es el valor, etc. De esta forma si quiero que me muestre, por ejemplo, el valor de la clave Nit de algún diccionario pues lo pueda hacer.
Yo lo que he hecho es crear una lista y luego leer el archivo de txt y a cada línea del archivo la he metido en esa misma lista, pero me gustaría saber si en lugar de trabajar con esta lista puedo trabajar con los diccionarios de forma independiente.
Espero haberme explicado
Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Rescatar diccionarios de un txt

Publicado por joel (901 intervenciones) el 01/03/2021 08:13:56
Ahora te entiendo Juan, gracias por la explicación...

Una manera muy sencilla es utilizar json.loads() algo así:
1
2
3
4
5
6
import json
 
# r seria la linea leída del archivo de texto
r='{"Aguas":"Mar","Propiedades":{"Nit":0,"Ox":10,"P":0.17}}'
dic=json.loads(r)
print(dic["Propiedades"]["Nit"]) # 0

te sirve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Rescatar diccionarios de un txt

Publicado por Juan (14 intervenciones) el 01/03/2021 18:39:54
Primero, gracias por comentar.
Lo que propones es lo que busco, pero mi duda es cómo puedo hacer eso con todas las líneas ya que de la forma en la comentas consigo rescatar uno de los diccionarios, pero como tengo muchos (no solo 5) hacer eso de uno en uno me es imposible. ¿Hay alguna forma de lograrlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Rescatar diccionarios de un txt

Publicado por joel (901 intervenciones) el 01/03/2021 19:25:21
Si, claro, discúlpame, es que no se porque, pero creí que ya sabias leer el archivo...
Cada linea que se lea del archivo donde quieres ponerla, en una lista?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Rescatar diccionarios de un txt

Publicado por Juan (14 intervenciones) el 01/03/2021 19:49:11
Yo actualmente tengo esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
URL = "https://web.es/archivo.txtt"
file = urllib.request.urlopen(URL) #Los archivos están en una web
 
f = open("GuardoArchivo.txt", "w")
content = str(file.read())
f.write(content)
f.close()
 
 
lines = []
for line in file:
    decoded_line = line.decode("utf-8")
    to_dict = eval(decoded_line)
    lines.append(to_dict)

Pero claro, yo tengo mis líneas guardadas en una lista como si fuesen cadenas de texto simple, pero lo que me gustaría tener es que en mi lista tener diccionarios, que si accedo a la posición 1 de la lista me reconozca esa cadena de texto como un diccionario, no sé si es posible
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Rescatar diccionarios de un txt

Publicado por joel (901 intervenciones) el 02/03/2021 07:59:25
Si, claro que es posible...

La url que me muestras no funciona, por lo que no puede modificar tu código... pero si lo tuviera en una cadena, seria algo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
import json
 
r="""{"Aguas":"Mar","Propiedades":{"Nit":0.781,"Ox":1.1,"P":30}}
{"Aguas":"Mar","Propiedades":{"Nit":1.5,"Ox":8.2,"P":2.2}}
{"Aguas":"Mar","Propiedades":{"Nit":1.5,"Error":{"Tipo":467}}}
{"Aguas":"Mar","Propiedades":{"Nit":0,"Ox":10,"P":0.17}}
"""
 
lines = []
for line in r.split():
    lines.append(json.loads(line))
 
print (lines)

lines es una lista de diccionarios con este valor:
1
[{'Aguas': 'Mar', 'Propiedades': {'Nit': 0.781, 'Ox': 1.1, 'P': 30}}, {'Aguas': 'Mar', 'Propiedades': {'Nit': 1.5, 'Ox': 8.2, 'P': 2.2}}, {'Aguas': 'Mar', 'Propiedades': {'Nit': 1.5, 'Error': {'Tipo': 467}}}, {'Aguas': 'Mar', 'Propiedades': {'Nit': 0, 'Ox': 10, 'P': 0.17}}]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 46
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Rescatar diccionarios de un txt

Publicado por Juan (14 intervenciones) el 02/03/2021 18:51:49
Perfecto. Muchas gracias^^ Duda resuelta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar