Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Eduard Diaz
Hola,

Supongo que no quieres utilizar json [1], no?

[1] https://docs.python.org/2/library/json.html
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Guillermo Vaya
Si es un json (como indica el ejemplo que pones) ¿por qué no usas alguna de
las librerias de json para que lo parsee?

A partir de ahi solo tienes que recorrerlo como una estructura de datos y
coger aquello que quieras sin los lios inherentes a hacer tus propias
expresiones regulares.


On Tue, Jun 3, 2014 at 11:22 AM, Miguel Angel Rodriguez maro...@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
 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/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Guillermo Vaya
como acabo de recibir el resto de correos que sugieren lo mismo que yo xD
te recomiendo otra utilidad

http://www.pythonregex.com/

con esa podras evaluar los resultados comodamente, ya que nadie excepto tu
puede saber si la expresion es valida al no tener todos los posibles casos
que te puedas encontrar.


2014-06-03 11:52 GMT+02:00 Guillermo Vaya nada...@gmail.com:

 Si es un json (como indica el ejemplo que pones) ¿por qué no usas alguna
 de las librerias de json para que lo parsee?

 A partir de ahi solo tienes que recorrerlo como una estructura de datos y
 coger aquello que quieras sin los lios inherentes a hacer tus propias
 expresiones regulares.


 On Tue, Jun 3, 2014 at 11:22 AM, Miguel Angel Rodriguez maro...@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
 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/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Miguel Angel Rodriguez
En principio necesito hacerlo con expresiones regulares. ¿Lo veis muy
complicado?

¿No creeis que casi está con la expresion regular que indiqué en mi primer
correo?




El 3 de junio de 2014, 11:52, Guillermo Vaya nada...@gmail.com escribió:

 Si es un json (como indica el ejemplo que pones) ¿por qué no usas alguna
 de las librerias de json para que lo parsee?

 A partir de ahi solo tienes que recorrerlo como una estructura de datos y
 coger aquello que quieras sin los lios inherentes a hacer tus propias
 expresiones regulares.


 On Tue, Jun 3, 2014 at 11:22 AM, Miguel Angel Rodriguez maro...@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
 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/




-- 
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/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Andres Marin
Hola,

Puedes hacer primero un split por la cadena },{ eso te devolverá una
lista iterable a la que puede, linea por linea, ir buscando la expresión \
name\:([\z\d]+)\.*\value\\:\([\z\d]+).

Quizas debas hacer algunos ajustes, pero creo que te funcionara. Por otra
parte, quien te manda los datos, aparentemente es un sistema juicioso que
manda los datos en formato JSON, puedes hacer una regex que te valide eso y
de paso lo elimine: al principio: {format:JSON,result: y al
final: ,version:1.0
el resultado aparente es una cadena con notacion de JSON la cual con la
libreria de python la puedes parsear sin problemas y obtener todo lo que
necesitas, sin que uses la regex exacta.

Saludos y espero te sirva.


On Tue, Jun 3, 2014 at 4:22 AM, Miguel Angel Rodriguez maro...@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
 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/




-- 
Andres Marin Gomez
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Chema Cortes
El 3 de junio de 2014, 11:56, Miguel Angel Rodriguez maro...@gmail.com
escribió:

 En principio necesito hacerlo con expresiones regulares. ¿Lo veis muy
 complicado?

 No es que sea complicado, sólo buscamos cómo trabajar menos, como los
buenos informáticos.


 ¿No creeis que casi está con la expresion regular que indiqué en mi primer
 correo?


Lo que veo de la expresión es que buscas name seguido inmediatamente de
value, cosa que no ocurre.

Prueba a separar los campos con algo así: '''name:(?Pname[\w\d\-.
]+).*?,value:(?Pvalue[\w\d\-. ]*)'''






 El 3 de junio de 2014, 11:52, Guillermo Vaya nada...@gmail.com escribió:

 Si es un json (como indica el ejemplo que pones) ¿por qué no usas alguna
 de las librerias de json para que lo parsee?

 A partir de ahi solo tienes que recorrerlo como una estructura de datos y
 coger aquello que quieras sin los lios inherentes a hacer tus propias
 expresiones regulares.


 On Tue, Jun 3, 2014 at 11:22 AM, Miguel Angel Rodriguez 
 maro...@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
 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/




 --
 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/




-- 
Hyperreals *R  Quarks, bits y otras criaturas infinitesimales:
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Miguel Angel Rodriguez
Muchisimas gracias por vuestras aportaciones.

Al final lo he solucionado un poco a la fuerza bruta.

 for channel_str in re.findall(\name\:\[A-Za-z0-9\-.
]+\,\unit\:\[A-Za-z0-9\-. ]+\,\meta\:\[A-Za-z0-9\-.
]+\,\value\:\[A-Za-z0-9\-. ]*\,value_str):
d_value = re.findall([A-Za-z0-9.\-]+,channel_str)
...

En cada iteración, en d_value tengo un array de esta forma: [name,(valor
del name),unit,(valor del unit),meta,(valor del meta),value,(valor del
value)]. Solo tengo que acceder a esta array con los indices que me
interesen para obtener lo que deseo.

Se que no es la forma más optima, pero funciona perfectamente.

Muchisimas gracias por todas vuestras aportaciones, sin duda este es el
mejor grupo de programadores que existe.

Saludos










El 3 de junio de 2014, 12:38, Chema Cortes pych...@gmail.com escribió:

 El 3 de junio de 2014, 11:56, Miguel Angel Rodriguez maro...@gmail.com
 escribió:

 En principio necesito hacerlo con expresiones regulares. ¿Lo veis muy
 complicado?

 No es que sea complicado, sólo buscamos cómo trabajar menos, como los
 buenos informáticos.


 ¿No creeis que casi está con la expresion regular que indiqué en mi
 primer correo?


 Lo que veo de la expresión es que buscas name seguido inmediatamente de
 value, cosa que no ocurre.

 Prueba a separar los campos con algo así: '''name:(?Pname[\w\d\-.
 ]+).*?,value:(?Pvalue[\w\d\-. ]*)'''






 El 3 de junio de 2014, 11:52, Guillermo Vaya nada...@gmail.com
 escribió:

 Si es un json (como indica el ejemplo que pones) ¿por qué no usas alguna
 de las librerias de json para que lo parsee?

 A partir de ahi solo tienes que recorrerlo como una estructura de datos
 y coger aquello que quieras sin los lios inherentes a hacer tus propias
 expresiones regulares.


 On Tue, Jun 3, 2014 at 11:22 AM, Miguel Angel Rodriguez 
 maro...@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
 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/




 --
 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/




 --
 Hyperreals *R  Quarks, bits y otras criaturas infinitesimales:
 http://ch3m4.org/blog
 Buscador Python Hispano: http://ch3m4.org/python-es

 ___
 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/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema gustavo
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/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema José Miguel P .
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
joz...@gmail.com


On Tue, Jun 3, 2014 at 11:22 AM, Miguel Angel Rodriguez maro...@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
 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/

Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Flavio Danesse
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/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Miguel Angel Rodriguez
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/


Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Flavio Danesse
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: 

Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Flavio Danesse
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 

Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Miguel Angel Rodriguez
Este es un ejemplo de lo que recibo:

{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


Quiero parsearlo para poder almacenar en unas variables que tengo los
values que aparecen en el JSON. De esta forma:

 Con la solucion con expresiones regulares en cada iteracion tengo lo
siguiente:
 d_value = [name,(valor del name),unit,(valor del unit),meta,(valor del
meta),value,(valor del value)]

En esa iteracion hago lo siguiente:
if d_value[1] == PF:
mi_variable_PF = d_value[7]
if d_value[1] == Fac:
   mi_variable_Fac = d_value[7]
.

No necesito todos los values, solo los que corresponden a unos determinados
name.

Con la solucion con expresiones regulares tengo el siguiente bug:
Alguna veces en el json aparece  unit:. Es decir, la clave key no tiene
valor, por lo que no consigo


El 3 de junio de 2014, 22:40, Flavio Danesse fdane...@gmail.com escribió:

 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
 

Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Miguel Angel Rodriguez
Este es un ejemplo de lo que recibo:

{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



Quiero parsearlo para poder almacenar en unas variables que tengo los
values que aparecen en el JSON. De esta forma:

 Con la solucion con expresiones regulares en cada iteracion tengo lo
siguiente:
 d_value = [name,(valor del name),unit,(valor del unit),meta,(valor del
meta),value,(valor del value)]

En esa iteracion hago lo siguiente:
if d_value[1] == PF:
mi_variable_PF = d_value[7]
if d_value[1] == Fac:
   mi_variable_Fac = d_value[7]
.

No necesito todos los values, solo los que corresponden a unos determinados
name.

Con la solucion con expresiones regulares tengo el siguiente bug:
Alguna veces en el json aparece  unit:. Es decir, la clave key no tiene
valor, por lo que obtengo un array de solo 7 elementos (sin el elemento
valor del unit) y consigo recuperar el value para ese name. ¿Alguien me
podría ayudar con esto?

Por ultimo, con la solucion con JSON, ¿es necesario usar ficheros? No se
como será el manejo de ficheros en el sistema donde va a funcionar este
python.


Gracias y un saludo


El 3 de junio de 2014, 22:53, Miguel Angel Rodriguez maro...@gmail.com
escribió:

 Este es un ejemplo de lo que recibo:

 {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



 Quiero parsearlo para poder almacenar en unas variables que tengo los
 values que aparecen en el JSON. De esta forma:

  Con la solucion con expresiones regulares en cada iteracion tengo lo
 siguiente:
  d_value = [name,(valor del name),unit,(valor del unit),meta,(valor del
 meta),value,(valor del value)]

 En esa iteracion hago lo siguiente:
 if d_value[1] == PF:
 mi_variable_PF = d_value[7]
 if d_value[1] == Fac:
mi_variable_Fac = d_value[7]
 .

 No necesito todos los values, solo los que corresponden a unos
 determinados name.

 Con la solucion con expresiones regulares tengo el siguiente bug:
 Alguna veces en el json aparece  unit:. Es decir, la clave key no
 tiene valor, por lo que no consigo


 El 3 de junio de 2014, 22:40, Flavio Danesse fdane...@gmail.com
 escribió:

 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 

Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Flavio Danesse
ok, dame unos minutos, me pongo en esto y te aviso.


El 3 de junio de 2014, 17:55, Miguel Angel Rodriguez maro...@gmail.com
escribió:

 Este es un ejemplo de lo que recibo:

 {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



 Quiero parsearlo para poder almacenar en unas variables que tengo los
 values que aparecen en el JSON. De esta forma:

  Con la solucion con expresiones regulares en cada iteracion tengo lo
 siguiente:
  d_value = [name,(valor del name),unit,(valor del unit),meta,(valor del
 meta),value,(valor del value)]

 En esa iteracion hago lo siguiente:
 if d_value[1] == PF:
 mi_variable_PF = d_value[7]
 if d_value[1] == Fac:
mi_variable_Fac = d_value[7]
 .

 No necesito todos los values, solo los que corresponden a unos
 determinados name.

 Con la solucion con expresiones regulares tengo el siguiente bug:
 Alguna veces en el json aparece  unit:. Es decir, la clave key no
 tiene valor, por lo que obtengo un array de solo 7 elementos (sin el
 elemento valor del unit) y consigo recuperar el value para ese name.
 ¿Alguien me podría ayudar con esto?

 Por ultimo, con la solucion con JSON, ¿es necesario usar ficheros? No se
 como será el manejo de ficheros en el sistema donde va a funcionar este
 python.


 Gracias y un saludo


 El 3 de junio de 2014, 22:53, Miguel Angel Rodriguez maro...@gmail.com
 escribió:

 Este es un ejemplo de lo que recibo:

 {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



 Quiero parsearlo para poder almacenar en unas variables que tengo los
 values que aparecen en el JSON. De esta forma:

  Con la solucion con expresiones regulares en cada iteracion tengo lo
 siguiente:
  d_value = [name,(valor del name),unit,(valor del unit),meta,(valor del
 meta),value,(valor del value)]

 En esa iteracion hago lo siguiente:
 if d_value[1] == PF:
 mi_variable_PF = d_value[7]
 if d_value[1] == Fac:
mi_variable_Fac = d_value[7]
 .

 No necesito todos los values, solo los que corresponden a unos
 determinados name.

 Con la solucion con expresiones regulares tengo el siguiente bug:
 Alguna veces en el json aparece  unit:. Es decir, la clave key no
 tiene valor, por lo que no consigo


 El 3 de junio de 2014, 22:40, Flavio Danesse fdane...@gmail.com
 escribió:

 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 

Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Jhonatan Sneider Salguero Villa
Hola,

por lo que veo el json esta mal formado (o le falta una parte a la cadena),
para poder parsearlo hay que eliminar la parte sobrante:

import json

# remover la parte sobrante
json_string = json_string = string.replace(',version:1.0 ', '}')

data = json.loads(json_string)

# si la cadena tiene la misma estructura siempre puedes hacer esto
channels = data[result][devices][0][channels]

key_value = map(lambda a: a.items(), channels)

con esto tienes una lista de listas con el formato

[('value', valor_value), ('meta', valor_meta), ('name', valor_name),
('unit', valor_unit)]


El 3 de junio de 2014, 15:55, Miguel Angel Rodriguez maro...@gmail.com
escribió:

 Este es un ejemplo de lo que recibo:

 {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



 Quiero parsearlo para poder almacenar en unas variables que tengo los
 values que aparecen en el JSON. De esta forma:

  Con la solucion con expresiones regulares en cada iteracion tengo lo
 siguiente:
  d_value = [name,(valor del name),unit,(valor del unit),meta,(valor del
 meta),value,(valor del value)]

 En esa iteracion hago lo siguiente:
 if d_value[1] == PF:
 mi_variable_PF = d_value[7]
 if d_value[1] == Fac:
mi_variable_Fac = d_value[7]
 .

 No necesito todos los values, solo los que corresponden a unos
 determinados name.

 Con la solucion con expresiones regulares tengo el siguiente bug:
 Alguna veces en el json aparece  unit:. Es decir, la clave key no
 tiene valor, por lo que obtengo un array de solo 7 elementos (sin el
 elemento valor del unit) y consigo recuperar el value para ese name.
 ¿Alguien me podría ayudar con esto?

 Por ultimo, con la solucion con JSON, ¿es necesario usar ficheros? No se
 como será el manejo de ficheros en el sistema donde va a funcionar este
 python.


 Gracias y un saludo


 El 3 de junio de 2014, 22:53, Miguel Angel Rodriguez maro...@gmail.com
 escribió:

 Este es un ejemplo de lo que recibo:

 {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



 Quiero parsearlo para poder almacenar en unas variables que tengo los
 values que aparecen en el JSON. De esta forma:

  Con la solucion con expresiones regulares en cada iteracion tengo lo
 siguiente:
  d_value = [name,(valor del name),unit,(valor del unit),meta,(valor del
 meta),value,(valor del value)]

 En esa iteracion hago lo siguiente:
 if d_value[1] == PF:
 mi_variable_PF = d_value[7]
 if d_value[1] == Fac:
mi_variable_Fac = d_value[7]
 .

 No necesito todos los values, solo los que corresponden a unos
 determinados name.

 Con la solucion con expresiones regulares tengo el siguiente bug:
 Alguna veces en el json aparece  unit:. Es decir, la clave key no
 tiene valor, por lo que no consigo


 El 3 de junio de 2014, 22:40, Flavio Danesse fdane...@gmail.com
 escribió:

 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á 

Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Flavio Danesse
Solucionado, dejo adjunto.


El 3 de junio de 2014, 19:56, Jhonatan Sneider Salguero Villa 
sney2...@gmail.com escribió:

 Hola,

 por lo que veo el json esta mal formado (o le falta una parte a la
 cadena), para poder parsearlo hay que eliminar la parte sobrante:

 import json

 # remover la parte sobrante
 json_string = json_string = string.replace(',version:1.0 ', '}')

 data = json.loads(json_string)

 # si la cadena tiene la misma estructura siempre puedes hacer esto
 channels = data[result][devices][0][channels]

 key_value = map(lambda a: a.items(), channels)

 con esto tienes una lista de listas con el formato

 [('value', valor_value), ('meta', valor_meta), ('name', valor_name),
 ('unit', valor_unit)]


 El 3 de junio de 2014, 15:55, Miguel Angel Rodriguez maro...@gmail.com
 escribió:

 Este es un ejemplo de lo que recibo:

 {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



 Quiero parsearlo para poder almacenar en unas variables que tengo los
 values que aparecen en el JSON. De esta forma:

  Con la solucion con expresiones regulares en cada iteracion tengo lo
 siguiente:
  d_value = [name,(valor del name),unit,(valor del unit),meta,(valor del
 meta),value,(valor del value)]

 En esa iteracion hago lo siguiente:
 if d_value[1] == PF:
 mi_variable_PF = d_value[7]
 if d_value[1] == Fac:
mi_variable_Fac = d_value[7]
 .

 No necesito todos los values, solo los que corresponden a unos
 determinados name.

 Con la solucion con expresiones regulares tengo el siguiente bug:
 Alguna veces en el json aparece  unit:. Es decir, la clave key no
 tiene valor, por lo que obtengo un array de solo 7 elementos (sin el
 elemento valor del unit) y consigo recuperar el value para ese name.
 ¿Alguien me podría ayudar con esto?

 Por ultimo, con la solucion con JSON, ¿es necesario usar ficheros? No se
 como será el manejo de ficheros en el sistema donde va a funcionar este
 python.


 Gracias y un saludo


 El 3 de junio de 2014, 22:53, Miguel Angel Rodriguez maro...@gmail.com
 escribió:

 Este es un ejemplo de lo que recibo:

 {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



 Quiero parsearlo para poder almacenar en unas variables que tengo los
 values que aparecen en el JSON. De esta forma:

  Con la solucion con expresiones regulares en cada iteracion tengo lo
 siguiente:
  d_value = [name,(valor del name),unit,(valor del unit),meta,(valor del
 meta),value,(valor del value)]

 En esa iteracion hago lo siguiente:
 if d_value[1] == PF:
 mi_variable_PF = d_value[7]
 if d_value[1] == Fac:
mi_variable_Fac = d_value[7]
 .

 No necesito todos los values, solo los que corresponden a unos
 determinados name.

 Con la solucion con expresiones regulares tengo el siguiente bug:
 Alguna veces en el json aparece  unit:. Es decir, la clave key no
 tiene valor, por lo que no consigo


 El 3 de junio de 2014, 22:40, Flavio Danesse fdane...@gmail.com
 escribió:

 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 

Re: [Python-es] Expresiones regulares

2014-06-03 Por tema Carlos Zuniga
2014-06-03 4:56 GMT-05:00 Miguel Angel Rodriguez maro...@gmail.com:
 En principio necesito hacerlo con expresiones regulares. ¿Lo veis muy
 complicado?

Se puede saber por qué?

2014-06-03 15:13 GMT-05:00 Miguel Angel Rodriguez maro...@gmail.com:

 Nunca he programado con json en python.

No hay mejor razón para comenzar ahora ;)


Saludos
-- 
A menudo unas pocas horas de Prueba y error podrán ahorrarte minutos
de leer manuales.
___
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] Expresiones regulares

2013-05-31 Por tema Manuel A. Estevez Fernandez
Saludos a todos

Debo extraer ciertos datos de un campo de texto los cuales pueden aparecer
en cualquier parte de la cadena.

Dicho datos son por ejemplo: 50 PALLETS, 10 CAJAS, etc.

Estoy haciendo la siguiente expresion regular para buscarlo

[0-9]*\s*[PALLET[S]|BULTO[S]|CAJA[S]|UNIDAD[ADES]|CARTON[ES]]

Sin embargo no me funciona como espero. ¿Me podrían echar una mano?



by:

ISC. Manuel Alejandro Estévez Fernández
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares

2013-05-31 Por tema Ricardo Azpeitia Pimentel
Realmente no es tanto problema de python es que tu expresión regular esta
mal formada. Te recomiendo leer algún tutorial de expresiones regulares.

*import re*
*
*
*pattern =
re.compile(r([0-9]*)\s*(PALLETS|PALLET|BULTOS|BULTO|CAJAS|CAJA|UNIDADES|UNIDAD|CARTONES|CARTON))
*
*
*
*assert pattern.match('50 PALLETS').groups() == ('50', 'PALLETS'), 'Fallo
test 1'*
*assert pattern.match('10 CAJAS').groups() == ('10', 'CAJAS'), 'Fallo test
2'*
*assert pattern.match('1 CAJA').groups() == ('1', 'CAJA'), 'Fallo test 3'*
*assert pattern.match('ZXVC') == None, 'Fallo test 4'*
*
*
*print 'Paso todos los tests'*
*
*
Adjunto un pequeño código, espero que te ayude.


El 31 de mayo de 2013 17:58, Manuel A. Estevez Fernandez
stvz...@gmail.comescribió:

 Saludos a todos

 Debo extraer ciertos datos de un campo de texto los cuales pueden aparecer
 en cualquier parte de la cadena.

 Dicho datos son por ejemplo: 50 PALLETS, 10 CAJAS, etc.

 Estoy haciendo la siguiente expresion regular para buscarlo

 [0-9]*\s*[PALLET[S]|BULTO[S]|CAJA[S]|UNIDAD[ADES]|CARTON[ES]]

 Sin embargo no me funciona como espero. ¿Me podrían echar una mano?



 by:

 ISC. Manuel Alejandro Estévez Fernández


 ___
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/


___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares: repeticiones de dos caracteres con longitud constante

2012-08-22 Por tema Juan Ignacio
¿Podría valerte este?

^A+B*$|^A*B+$

Tendrías que comprobar en un test aparte que la longitud del string es N

2012/8/22 Jesús Curbelo Rodríguez jescurb...@gmail.com

  Hola a todos,

 Me ha surgido una duda intentando crear una expresión regular.

 Supongamos que tenemos una lista de cadenas que cumplen las siguientes
 condiciones

- La longitud de las cadenas es constante, digamos que de longitud N.
- Las cadenas están formadas sólo por los caracteres A y B.
- Los caracteres A siempre están alineados a la izquierda.
- Los caracteres B siempre están alineados a la derecha.
- Los caracteres A pueden aparecer J veces, siendo 0=J=N.
- Los caracteres B pueden aparecer K veces, siendo 0=K=N.
- J y K son distintos para cada cadena pero siempre se cumple J + K =
N.
- Ejemplos, para N=5: A, B, AAABB, AABBB, A, B (para
N=5 no hay más posibilidades).


 Cuando N es pequeño podemos poner todas las opciones como alternativas,
 por ejemplo, para N=2 podemos usar la expresión A{2}|AB|BA|B{2} . Pero para
 valores mayores de N esta forma de proceder es inviable.

 ¿Alguien conoce una expresión regular que se pueda usar para cualquier
 valor de N?

 Gracias de antemano.

 Saludos.

 Jesús Curbelo.

 ___
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/




-- 
Juan Ignacio Rodríguez de León
Móvil: 605 890514
E-Mail: euriba...@gmail.com
http://www.metriz.com/
http://descon2.com/
http://www.elornitorrincoenmascarado.com/
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares: repeticiones de dos caracteres con longitud constante

2012-08-22 Por tema Jesús Curbelo Rodríguez

El 22/08/2012 10:56, Juan Ignacio escribió:

¿Podría valerte este?

^A+B*$|^A*B+$

Tendrías que comprobar en un test aparte que la longitud del string es N

2012/8/22 Jesús Curbelo Rodríguez jescurb...@gmail.com 
mailto:jescurb...@gmail.com


Hola a todos,

Me ha surgido una duda intentando crear una expresión regular.

Supongamos que tenemos una lista de cadenas que cumplen las
siguientes condiciones

  * La longitud de las cadenas es constante, digamos que de
longitud N.
  * Las cadenas están formadas sólo por los caracteres A y B.
  * Los caracteres A siempre están alineados a la izquierda.
  * Los caracteres B siempre están alineados a la derecha.
  * Los caracteres A pueden aparecer J veces, siendo 0=J=N.
  * Los caracteres B pueden aparecer K veces, siendo 0=K=N.
  * J y K son distintos para cada cadena pero siempre se cumple J
+ K = N.
  * Ejemplos, para N=5: A, B, AAABB, AABBB, A, B
(para N=5 no hay más posibilidades).


Cuando N es pequeño podemos poner todas las opciones como
alternativas, por ejemplo, para N=2 podemos usar la expresión
A{2}|AB|BA|B{2} . Pero para valores mayores de N esta forma de
proceder es inviable.

¿Alguien conoce una expresión regular que se pueda usar para
cualquier valor de N?

Gracias de antemano.

Saludos.

Jesús Curbelo.


___
Python-es mailing list
Python-es@python.org mailto:Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/




--
Juan Ignacio Rodríguez de León
Móvil: 605 890514
E-Mail: euriba...@gmail.com mailto:euriba...@gmail.com
http://www.metriz.com/
http://descon2.com/
http://www.elornitorrincoenmascarado.com/


___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Hola Juan Ignacio,

La idea era que N apareciese explícitamente en la expresión 
regular. Pero me temo que es imposible sólo con expresiones regulares 
así que la solución que propones debe ser la correcta.


Gracias por tu tiempo y saludos.

--
*Jesús Curbelo mailto:jescurb...@gmail.com
/Quis custodiet ipsos custodes?/ *
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares: repeticiones de dos caracteres con longitud constante

2012-08-22 Por tema Chema Cortes
El día 22 de agosto de 2012 12:11, Jesús Curbelo Rodríguez
jescurb...@gmail.com escribió:

 La idea era que N apareciese explícitamente en la expresión regular.
 Pero me temo que es imposible sólo con expresiones regulares así que la
 solución que propones debe ser la correcta.


^(A|(B(?!A))){{{}}}$.format(N)






-- 
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares por grupo

2011-02-11 Por tema Chema Cortes

En Thu, 10 Feb 2011 14:42:36 +0100, lopz lowlife...@gmail.com escribió:

El día 10 de febrero de 2011 04:50, Chema Cortes pych...@gmail.com  
escribió:



Si sabes que los tres patrones de búsqueda van a ir en ése orden, se
podrían encadenar:

pat1=q=(.*?)[]
pat2=(\d{4}-\d{2}-\d{2})
pat3=p class=text(.*?)/p

pat=re.compile(.*?.join((pat1,pat2,pat3)), re.DOTALL)

Dos comentarios:

1) activa el flag dotall para búsquedas multilíneas
2) te sobraba el carácter | en el primer patrón (por lo que comentabas)


Sí, gracias por el tip, lo del caracterr | lo puse por or pero ahora
que veo no es necesario jeje
Peero sigo con la duda de que cómo sería en una sola expresión?
cómo le digo que me coja desde q= hasta /p y lo que está en medio
agrupar partes por grupos?
¿o es que esto no se puede?


Te había respondido a tu pregunta: si juntas los tres grupos con .*?  
tendrás todo en una sóla expresión:


(?s)q=(.*?)[].*?(\d{4}-\d{2}-\d{2}).*?p class=text(.*?)/p

Pero te en cuenta que algún día tú u otro programador querrá modificar  
este código, así que ponlo lo más fácil posible.


Por otro lado, tú mismo estás viendo que es mejor primero buscar un  
fragmento y luego trocearlo en grupos. Tal vez deberías hacer caso a tu  
instinto.

___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares por grupo

2011-02-10 Por tema Chema Cortes
El día 10 de febrero de 2011 02:46, lopz lowlife...@gmail.com escribió:

 Sabría hacerlo por partes, primero un datos luego el otro y así, pero
 mi idea es hacerlo en una sola expresión y obtenerlo por grupos

Igual es que ése es el modo, buscar cada patrón por separado. En
general, el módulo re es bastante rápido como para que te preocupe
hacer tres veces la búsqueda.

Si sabes que los tres patrones de búsqueda van a ir en ése orden, se
podrían encadenar:

pat1=q=(.*?)[]
pat2=(\d{4}-\d{2}-\d{2})
pat3=p class=text(.*?)/p

pat=re.compile(.*?.join((pat1,pat2,pat3)), re.DOTALL)

Dos comentarios:

1) activa el flag dotall para búsquedas multilíneas
2) te sobraba el carácter | en el primer patrón (por lo que comentabas)
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


[Python-es] Expresiones regulares por grupo

2011-02-09 Por tema lopz
Hola

Hace poco empecé son las expresiones regulares y estaba tratando de
usarlas y tengo un pequeño problema al momento de
parsear un html que extraigo de una página web, la idea es la
siguiente, de un trozo de código html quiero extraer datos pero de
diferentes líneas
para esto hago uso de los grupos, mejor paso a pegar el trozo de
código html y lo que intento extraer y lo que tengo hasta el momento


h2Google search: a
href=http://www.google.com/search?hl=en#038;q=BUSQUEDA#038;btnG=Google+Search;
class=external rel=nofollowquot;BUSQUEDA/a/h2

palgo/p
pfecha: 2006-03-06/p
p class=textLINEA 1
LINEA 2
LINEA3/p
/div

Tengo esto y lo que quiero es obtener 3 datos de ahí,  lo que dice
BUSQUEDA, luego de la q=
luego la fecha y por último LINEA 1, LINEA 2 y LINEA 3

Sabría hacerlo por partes, primero un datos luego el otro y así, pero
mi idea es hacerlo en una sola expresión y obtenerlo por grupos
lo que tengo hasta el momento es esto para obtener la palabra BUSQUEDA
q=(.+?)[|] - esto me busca hasta que cierra comillas o hasta que se
encuentre con  que aveces está presente en medio y que a partir
de ahí son parámetros que usa google
para la fecha lo tengo así: (\d{4}-\d{2}-\d{2})
y para lo otro sería casi igual pero mi problema es que no se unirlas
en una sola expresión jeje
osea que en medio de esas incluya cualquier cosa como las etiquetas
/h2 saltos de linea, tabs, etc
Espero me puedan ayudar, desde ya muchas gracias

saludOS!

-- 
lopz es libre, usa -- GNU/linux gentoo

+--[RSA 2048]--+
|  ..o.o=+       |
|   o =o*.+      |
|  . . *oO .      |
|     .EBoo      |
|      o.S         |
+--[lopz.org]--+
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares por grupo

2011-02-09 Por tema Andrey Antoukh
Opino lo mismo, y lxml en mi caso ha sido una herramienta maravillosa.

Un saluso.

El día 10 de febrero de 2011 07:12, Luis Miguel Morillas
moril...@gmail.com escribió:
 El día 10 de febrero de 2011 02:46, lopz lowlife...@gmail.com escribió:
 Hola

 Hace poco empecé son las expresiones regulares y estaba tratando de
 usarlas y tengo un pequeño problema al momento de
 parsear un html que extraigo de una página web, la idea es la
 siguiente, de un trozo de código html quiero extraer datos pero de
 diferentes líneas
 para esto hago uso de los grupos, mejor paso a pegar el trozo de
 código html y lo que intento extraer y lo que tengo hasta el momento


 h2Google search: a
 href=http://www.google.com/search?hl=en#038;q=BUSQUEDA#038;btnG=Google+Search;
 class=external rel=nofollowquot;BUSQUEDA/a/h2

 palgo/p
 pfecha: 2006-03-06/p
 p class=textLINEA 1
 LINEA 2
 LINEA3/p
 /div

 Tengo esto y lo que quiero es obtener 3 datos de ahí,  lo que dice
 BUSQUEDA, luego de la q=
 luego la fecha y por último LINEA 1, LINEA 2 y LINEA 3

 Sabría hacerlo por partes, primero un datos luego el otro y así, pero
 mi idea es hacerlo en una sola expresión y obtenerlo por grupos
 lo que tengo hasta el momento es esto para obtener la palabra BUSQUEDA
 q=(.+?)[|] - esto me busca hasta que cierra comillas o hasta que se
 encuentre con  que aveces está presente en medio y que a partir
 de ahí son parámetros que usa google
 para la fecha lo tengo así: (\d{4}-\d{2}-\d{2})
 y para lo otro sería casi igual pero mi problema es que no se unirlas
 en una sola expresión jeje
 osea que en medio de esas incluya cualquier cosa como las etiquetas
 /h2 saltos de linea, tabs, etc
 Espero me puedan ayudar, desde ya muchas gracias


 Yo no te puedo ayudar con la expresión regular. Sólo quería comentar
 que para hacer web scraping se suelen utilizar parsers de html o xml.
 En este caso un análisis del DOM resolvería el problema. Además te da
 más flexibilidad para sencillos cambios de la página inicial.

 -- luismiguel



 saludOS!

 --
 lopz es libre, usa -- GNU/linux gentoo

 +--[RSA 2048]--+
 |  ..o.o=+       |
 |   o =o*.+      |
 |  . . *oO .      |
 |     .EBoo      |
 |      o.S         |
 +--[lopz.org]--+
 ___
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/

 ___
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/




-- 
http://twitter.com/andsux
http://www.niwi.be

http://www.freebsd.org/
http://www.postgresql.org/
http://www.python.org/
http://www.djangoproject.com/

Linux is for people who hate Windows, BSD is for people who love UNIX
Social Engineer - Because there is no patch for human stupidity
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/