[Python-es] Expresiones regulares

Miguel Angel Rodriguez marodal en gmail.com
Mar Jun 3 22:13:27 CEST 2014


No entiendo que haces con archivo...

Nunca he programado con json en python.

¿Como seria a partir de lo que indicas el parseo de los datos? Es decir,
¿Como seria el bucle que me iria dando el name y el value?




2014-06-03 22:08 GMT+02:00 Flavio Danesse <fdanesse en gmail.com>:

> Voto por lo correcto que sería así:
>
> import os
> import json
> import codecs
>
> text = '{"format":"JSON","result":{"devices":[{"key":"SCGDE1BA:180340320", etc
> . . .
>
> path = "/tmp/x.json"
>
> archivo = open(path, "w")
> archivo.write(text)
> archivo.close()
>
> archivo = codecs.open(path, "r", "utf-8")
> diccionario = json.JSONDecoder("utf-8").decode(archivo.read())
>
>
> El 3 de junio de 2014, 8:03, <gustavo en nodo50.org> escribió:
>
> ejecutando esto:
>>
>> #!/usr/bin/python3
>> import re
>> value_str =
>>
>> '{"format":"JSON","result":{"devices":[{"key":"SCGDE1BA:180340320","channels":[{"name":"PF","unit":"","meta":"PF","value":"1.000"},{"name":"P-WSpt","unit":"kW","meta":"P-WSpt","value":"935"},{"name":"Vac","unit":"V","meta":"Vac","value":"217.5"},{"name":"Iac","unit":"A","meta":"Iac","value":"513.8"},{"name":"Pac","unit":"kW","meta":"Pac","value":"335.2"},{"name":"Qac","unit":"kVAr","meta":"Qac","value":"-1.0"},{"name":"Sac","unit":"kVA","meta":"Sac","value":"335.1"},{"name":"Fac","unit":"Hz","meta":"Fac","value":"49.950"},{"name":"ErrNoFirst","unit":"","meta":"ErrNoFirst","value":"0"},{"name":"P-WModFailStt","unit":"","meta":"P-WModFailStt","value":"Off"},{"name":"P-WModStt","unit":"","meta":"P-WModStt","value":"Off"},{"name":"Dsc","unit":"","meta":"Dsc","value":"---"},{"name":"Firmware-9","unit":"","meta":"Firmware-9","value":""},{"name":"Cntry","unit":"","meta":"Cntry","value":"DE1"}
>>
>> ,{"name":"Type","unit":"","meta":"Type","value":"SCG"},{"name":"Mode","unit":"","meta":"Mode","value":"Operation"},{"name":"Error","unit":"","meta":"Error","value":"---"}]}]},"version":"1.0"'
>>
>> for channel_str in re.findall("\"name\":\"[A-Za-z0-9\-.]+\"",value_str):
>>  for channel_str1 in
>> re.findall("\"value\":\"[A-Za-z0-9\-.]+\"",value_str):
>>   print ( channel_str + ";" + channel_str1 )
>>
>> me da esto:
>>
>> "name":"Cntry";"value":"335.2"
>> "name":"Cntry";"value":"-1.0"
>> "name":"Cntry";"value":"335.1"
>> "name":"Cntry";"value":"49.950"
>> "name":"Cntry";"value":"0"
>> "name":"Cntry";"value":"Off"
>> "name":"Cntry";"value":"Off"
>> "name":"Cntry";"value":"---"
>> "name":"Cntry";"value":"DE1"
>> "name":"Cntry";"value":"SCG"
>> "name":"Cntry";"value":"Operation"
>> "name":"Cntry";"value":"---"
>> "name":"Type";"value":"1.000"
>> "name":"Type";"value":"935"
>> "name":"Type";"value":"217.5"
>> "name":"Type";"value":"513.8"
>> "name":"Type";"value":"335.2"
>> "name":"Type";"value":"-1.0"
>> "name":"Type";"value":"335.1"
>> "name":"Type";"value":"49.950"
>>
>>
>> te vale?
>>
>>
>>
>>
>>
>> > Hola a todos,
>> >
>> > Estoy intentando parsear con Python una gran cadena que recibo en un
>> > software de comunicaciones que estoy programando.
>> >
>> > La cadena que yo recibo es la siguiente:
>> >
>> > value_str =
>> >
>> {"format":"JSON","result":{"devices":[{"key":"SCGDE1BA:180340320","channels":[{"name":"PF","unit":"","meta":"PF","value":"1.000"},{"name":"P-WSpt","unit":"kW","meta":"P-WSpt","value":"935"},
>> >
>> >
>> {"name":"Vac","unit":"V","meta":"Vac","value":"217.5"},{"name":"Iac","unit":"A","meta":"Iac","value":"513.8"},{"name":"Pac","unit":"kW","meta":"Pac","value":"335.2"},{"name":"Qac","unit":"kV
>> >
>> >
>> Ar","meta":"Qac","value":"-1.0"},{"name":"Sac","unit":"kVA","meta":"Sac","value":"335.1"},{"name":"Fac","unit":"Hz","meta":"Fac","value":"49.950"},{"name":"ErrNoFirst","unit":"","meta":"ErrNoFirst","value":"0"},{"
>> >
>> >
>> name":"P-WModFailStt","unit":"","meta":"P-WModFailStt","value":"Off"},{"name":"P-WModStt","unit":"","meta":"P-WModStt","value":"Off"},{"name":"Dsc","unit":"","meta":"Dsc","value":"---"},{"name":"Firmware-9","unit":"","meta":"Firmware-9","value":"
>> > "},{"name":"Cntry","unit":"","meta":"Cntry","value":"DE1"}
>> >
>> ,{"name":"Type","unit":"","meta":"Type","value":"SCG"},{"name":"Mode","unit":"","meta":"Mode","value":"Operation"},{"name":"Error","unit":"","meta":"Error","value":"---"}]}]},"version":"1.0"
>> >
>> >
>> > Yo solo quiero quedarme con los name y value existente.
>> >
>> > LA forma en la que lo estoy intentando es la siguiente:
>> >
>> > for channel_str in re.findall("\"name\":\"[A-Za-z0-9\-.
>> > ]+\",\"value\":\"[A-Za-z0-9\-. ]*\"",value_str):
>> >             d_value = re.findall("[A-Za-z0-9.\-]+",channel_str)
>> >
>> > Pero de esta forma no entra en el for.
>> >
>> > ¿Alguien me puede ayudar?
>> >
>> > Gracias y un saludo
>> >
>> >
>> >
>> >
>> >
>> >
>> > --
>> > Miguel Ángel Rodríguez de Alba
>> > 678304435
>> > marodal en gmail.com
>> > _______________________________________________
>> > Python-es mailing list
>> > Python-es en python.org
>> > https://mail.python.org/mailman/listinfo/python-es
>> > FAQ: http://python-es-faq.wikidot.com/
>> >
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
Miguel Ángel Rodríguez de Alba
678304435
marodal en gmail.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140603/b04c75e9/attachment.html>


Más información sobre la lista de distribución Python-es