[Python-es] Expresiones regulares

José Miguel P. jozemi en gmail.com
Mar Jun 3 11:41:36 CEST 2014


Hola,

¿Es siempre un json lo que recibes? Lo digo porque quizás puedes intentar
decodificarlo como json ¿no? https://docs.python.org/2/library/json.html
He comprobado la sintaxis de la cadena que pasas y es un formato válido de
json:

{
   "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"
}

A no ser que en otras ocasiones recibas otra cosas, lo que yo te
recomendaría es que lo decodifiques y lo uses cono clave, valor.

Espero que te ayude, un saludo!

Un saludo

--
*José Miguel Pérez Álvarez*, @jozemi <http://twitter.com/jozemi>
Linkedin: http://es.linkedin.com/in/jozemi
jozemi en gmail.com


On Tue, Jun 3, 2014 at 11:22 AM, Miguel Angel Rodriguez <marodal en gmail.com>
wrote:

>
> 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/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140603/e8b2205c/attachment.html>


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