Si quieres pasame un string de ejemplo que esté completo y dime que hacer con los values y te escribo la solución.
El 3 de junio de 2014, 17:38, Flavio Danesse <fdane...@gmail.com> escribió: > Lo que hago es tomar el string que tienes y guardarlo en un archivo como > texto plano pero luego lo cargo utilizando json con lo cual obtengo un > diccionario python. Para obtener las keys y values del diccionario solo > tienes que hacer diccionario.keys() y diccionario.values() o puedes hacer > también diccionario.items() lo cual te da la pareja key:value. > > En todos los casos obtendrás lista de keys, values o items. > > Ahora bien, el primer obstáculo está salvado, que era pasar el string a un > diccionario donde tienes parejas key-value. > > El segundo obstaculo es hacer recursividad dentro del diccionario para > seguir hacia adentro de la estructura obteniendo los diccionarios internos. > No es tan complicado, puedes comenzar con algo como: > > for key in diccionario.keys(): > valor = diccionario[key] > . . . lo que quieras con el key y lo que quieras con value aca > importa que tipo de dato es el value, porque por lo que veo tienes listas, > diccionarios, string, etc, utiliza type(valor) para operar sobre ellos > según su tipo. > > > > > El 3 de junio de 2014, 17:13, Miguel Angel Rodriguez <maro...@gmail.com> > escribió: > > 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 <fdane...@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, <gust...@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 >>>> > maro...@gmail.com >>>> > _______________________________________________ >>>> > Python-es mailing list >>>> > Python-es@python.org >>>> > https://mail.python.org/mailman/listinfo/python-es >>>> > FAQ: http://python-es-faq.wikidot.com/ >>>> > >>>> >>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es@python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> FAQ: http://python-es-faq.wikidot.com/ >>>> >>> >>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> >> >> -- >> Miguel Ángel Rodríguez de Alba >> 678304435 >> maro...@gmail.com >> >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/