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] Analizar cadena y extraer valores

2014-06-03 Por tema Luis Iglesias

- Mensaje original -
De: Manuel A. Estevez Fernandez stvz...@gmail.com
Para: La lista de python en castellano python-es@python.org
Enviados: Lunes, 2 de Junio 2014 17:50:02
Asunto: Re: [Python-es] Analizar cadena y extraer valores

Muchas gracias por tu aportación Luis, si me pudieras compartir tu código te lo 
agradecería mucho. Porque de momento estoy jugando todavía a prueba y error con 
la interpretación del texto extraído. 


No sé si la lista admite adjuntos.
Envío el módulo principal y un ejemplo de uso. Ten en cuenta que este módulo 
trabaja con el fichero html que se genera con pdftotext a partir del pdf.
Yo lo estoy empleando para leer facturas y generar un json con los datos

El código de uso sería algo así:

from ocr.utilspdf import PdfTextInfo
from extra import debug, fechas
import json
import os.path

hInfo = PdfTextInfo(ficheroHtml)
self.json = {}
j = self.json
j['002.pdf.pagDesde'] = 1
j['002.pdf.pagHasta'] = hInfo.totalPaginas
j['010.factura'] = hInfo.getTextoEnXY(1, 70.8, 216.352)
j['021.fIniFact'] = 
fechas.YMD(fechas.dd_mm_aa2date(hInfo.getTextoEnXY(1, 70.8, 317.632)))
p = hInfo.getNumpag(70.8, 126.416, 'ENDEREZO')
j['040.direccion'] = hInfo.getTextoEnRegion(p, (70.8, 134.032, 300, 
142.888))

La clase PdfTextInfo está definida en el módulo utilspdf que adjunto.
El método getTextoEnXY devuelve la palabra que tiene exactamente esas 
coordenadas en la esquina superior izquierda.
El método getTextoEnRegion recoge el texto que se encuentra en las esquinas que 
se le pasen.
Hay algunos métodos que quizá no te hagan falta, como obtener el total de 
páginas o preguntar en qué página se encuentra tal texto en tal posición.

Si tienes alguna pregunta no tendré problema en contestar: por aquí (si la 
lista está de acuerdo) o por el correo privado.
# -*- coding: ISO-8859-1 -*
'''
Created on 07/03/2012

@author: luis
'''
import os
import codecs
from extra import debug
import subprocess
from HTMLParser import HTMLParser

pdfTextInfo = None 
FORMATO_IDX = %d^%.3f^%.3f # página, coordX, coordY

class AnalizadorHtml(HTMLParser):
	def setPage(self, page):
		self.page = page
		
	def handle_starttag(self, tag, attrs):
		for attr in attrs:
			setattr(self, attr[0], attr[1])
			
	def handle_data(self, data):
		self.word=data.strip()
		
	def getInfo(self):
		return (self.page, float(self.xmin), float(self.ymin), 
			float(self.xmax), float(self.ymax), self.word)
	
	def getIdx(self):
		return FORMATO_IDX % (self.page, float(self.xmin), float(self.ymin))
	
class PdfTextInfo:
	def __init__(self, html):
		self.html = html
		self.totalPaginas = 0
		analizador = AnalizadorHtml()
		self.palabras = []
		self.dict = {};
		for lin in codecs.open(html, encoding='utf-8'):
			lin = lin.strip()
			if lin.startswith(page ):
self.totalPaginas += 1
analizador.setPage(self.totalPaginas)
			if lin.startswith(word ):
analizador.feed(lin)
# Añadimos a la lista 
self.palabras.append(analizador.getInfo())
# Añadimos al diccionario (accede más rápido por coordenadas)
self.dict[analizador.getIdx()] = analizador.getInfo()
		# Ahora ordenamos por pag, yMin, xMin
		self.palabras.sort(key=lambda w: (w[0], w[2], w[1]))
		
	def getNumpag(self, pX, pY, texto):
		'Indica en qué página está el texto pasado'
		for pag in range(1, self.totalPaginas+1):
			if self.getTextoEnXY(pag, pX, pY) == texto:
return pag
	
	def getInfoTexto(self, texto):
		for w in self.palabras:
			if w[5] == texto:
return w
		
	def getTextoEnXY(self, pPag, pX, pY):
		idx = FORMATO_IDX % (pPag, pX, pY)
		return self.dict[idx][5] if idx in self.dict else None
	
	def getTextoEnRegion(self, pPag, pReg):
		res = 
		for w in self.palabras:
			(pag, xMin, yMin, xMax, yMax, palabra) = w
			if pag  pPag:
return res.strip()
			if pag == pPag:
if xMin = pReg[0] and yMin = pReg[1]:
	if xMax = pReg[2]+1 and yMax = pReg[3]+1:
		res +=  + palabra
if yMin  pReg[3]:
	return res.strip()
		return res.strip()
		
	def getCoordenadasDeTexto(self, pPag, texto):
		for w in self.palabras:
			(pag, xMin, yMin, xMax, yMax, palabra) = w
			if pag  pPag:
return None
			if pag == pPag and palabra == texto:
return xMin, yMin
			
___
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] Analizar cadena y extraer valores

2014-06-03 Por tema Manuel A. Estevez Fernandez
Muchas gracias, los voy a revisar.

Saludos.

by:

ISC. Manuel Alejandro Estévez Fernández



El 3 de junio de 2014, 5:50, Luis Iglesias luis.igles...@vigo.org
escribió:


 - Mensaje original -
 De: Manuel A. Estevez Fernandez stvz...@gmail.com
 Para: La lista de python en castellano python-es@python.org
 Enviados: Lunes, 2 de Junio 2014 17:50:02
 Asunto: Re: [Python-es] Analizar cadena y extraer valores

 Muchas gracias por tu aportación Luis, si me pudieras compartir tu código
 te lo agradecería mucho. Porque de momento estoy jugando todavía a prueba y
 error con la interpretación del texto extraído.

 
 No sé si la lista admite adjuntos.
 Envío el módulo principal y un ejemplo de uso. Ten en cuenta que este
 módulo trabaja con el fichero html que se genera con pdftotext a partir del
 pdf.
 Yo lo estoy empleando para leer facturas y generar un json con los datos

 El código de uso sería algo así:

 from ocr.utilspdf import PdfTextInfo
 from extra import debug, fechas
 import json
 import os.path

 hInfo = PdfTextInfo(ficheroHtml)
 self.json = {}
 j = self.json
 j['002.pdf.pagDesde'] = 1
 j['002.pdf.pagHasta'] = hInfo.totalPaginas
 j['010.factura'] = hInfo.getTextoEnXY(1, 70.8, 216.352)
 j['021.fIniFact'] =
 fechas.YMD(fechas.dd_mm_aa2date(hInfo.getTextoEnXY(1, 70.8, 317.632)))
 p = hInfo.getNumpag(70.8, 126.416, 'ENDEREZO')
 j['040.direccion'] = hInfo.getTextoEnRegion(p, (70.8, 134.032,
 300, 142.888))

 La clase PdfTextInfo está definida en el módulo utilspdf que adjunto.
 El método getTextoEnXY devuelve la palabra que tiene exactamente esas
 coordenadas en la esquina superior izquierda.
 El método getTextoEnRegion recoge el texto que se encuentra en las
 esquinas que se le pasen.
 Hay algunos métodos que quizá no te hagan falta, como obtener el total de
 páginas o preguntar en qué página se encuentra tal texto en tal posición.

 Si tienes alguna pregunta no tendré problema en contestar: por aquí (si la
 lista está de acuerdo) o por el correo privado.

 ___
 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] Analizar cadena y extraer valores

2014-06-03 Por tema Juan BC
pdfminner

El día 3 de junio de 2014, 12:07, Manuel A. Estevez Fernandez
stvz...@gmail.com escribió:
 Muchas gracias, los voy a revisar.

 Saludos.

 by:

 ISC. Manuel Alejandro Estévez Fernández



 El 3 de junio de 2014, 5:50, Luis Iglesias luis.igles...@vigo.org
 escribió:


 - Mensaje original -
 De: Manuel A. Estevez Fernandez stvz...@gmail.com
 Para: La lista de python en castellano python-es@python.org
 Enviados: Lunes, 2 de Junio 2014 17:50:02
 Asunto: Re: [Python-es] Analizar cadena y extraer valores

 Muchas gracias por tu aportación Luis, si me pudieras compartir tu código
 te lo agradecería mucho. Porque de momento estoy jugando todavía a prueba y
 error con la interpretación del texto extraído.

 
 No sé si la lista admite adjuntos.
 Envío el módulo principal y un ejemplo de uso. Ten en cuenta que este
 módulo trabaja con el fichero html que se genera con pdftotext a partir del
 pdf.
 Yo lo estoy empleando para leer facturas y generar un json con los datos

 El código de uso sería algo así:

 from ocr.utilspdf import PdfTextInfo
 from extra import debug, fechas
 import json
 import os.path

 hInfo = PdfTextInfo(ficheroHtml)
 self.json = {}
 j = self.json
 j['002.pdf.pagDesde'] = 1
 j['002.pdf.pagHasta'] = hInfo.totalPaginas
 j['010.factura'] = hInfo.getTextoEnXY(1, 70.8, 216.352)
 j['021.fIniFact'] =
 fechas.YMD(fechas.dd_mm_aa2date(hInfo.getTextoEnXY(1, 70.8, 317.632)))
 p = hInfo.getNumpag(70.8, 126.416, 'ENDEREZO')
 j['040.direccion'] = hInfo.getTextoEnRegion(p, (70.8, 134.032,
 300, 142.888))

 La clase PdfTextInfo está definida en el módulo utilspdf que adjunto.
 El método getTextoEnXY devuelve la palabra que tiene exactamente esas
 coordenadas en la esquina superior izquierda.
 El método getTextoEnRegion recoge el texto que se encuentra en las
 esquinas que se le pasen.
 Hay algunos métodos que quizá no te hagan falta, como obtener el total de
 páginas o preguntar en qué página se encuentra tal texto en tal posición.

 Si tienes alguna pregunta no tendré problema en contestar: por aquí (si la
 lista está de acuerdo) o por el correo privado.

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




-- 
Juan B Cabral
___
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/