Estructuras de datos
luis miguel morillas
morillas en posta.unizar.es
Vie Sep 10 18:48:46 CEST 2004
Asunto: [Python-es] Estructuras de datos
Fecha: Fri, Sep 10, 2004 at 09:41:40AM +0200
Citando a Catalin Lungu (lcatalin en siadv.com):
> Hola,
> Tengo un problema tonto, que creo que es mas de lógica que de Python.
> Tengo el siguiente fichero :
>
> <TABLA>
> <TABLA_ID>Ntabla1<\TABLA_ID>
> <DESCRIPCION>Descripcion1<\DESCRIPCION>
> <CAMPOS>
> <CAMPO>
> <CAMPO_ID>Ncampo11<\CAMPO_ID>
> <TIPO>Tcampo11<\TIPO>
> <\CAMPO>
> <CAMPO>
> <CAMPO_ID>Ncampo12<\CAMPO_ID>
> <TIPO>Tcampo12<\TIPO>
> <\CAMPO>
> <\CAMPOS>
> <FECHAHORA>Fechahora1<\FECHAHORA>
> <\TABLA>
> <TABLA>
> <TABLA_ID>Ntabla2<\TABLA_ID>
> <DESCRIPCION>Descripcion2<\DESCRIPCION>
> <CAMPOS>
> <CAMPO>
> <CAMPO_ID>Ncampo21<\CAMPO_ID>
> <TIPO>Tcampo21<\TIPO>
> <\CAMPO>
> <CAMPO>
> <CAMPO_ID>Ncampo22<\CAMPO_ID>
> <TIPO>Tcampo22<\TIPO>
> <\CAMPO>
> <\CAMPOS>
> <FECHAHORA>Fechahora2<\FECHAHORA>
> <\TABLA>
>
> Lo leo y lo guardo de esta forma:
> result = {'TABLA': [{'TABLA_ID': ['Ntabla1'], 'DESCRIPCION': ['Descripcion1'], 'CAMPOS': [{'CAMPO': [{'CAMPO_ID': ['Ncampo11'], 'TIPO': ['Tcampo11']}, {'CAMPO_ID': ['Ncampo12'], 'TIPO': ['Tcampo12']}]}], 'FECHAHORA': ['Fechahora1']}, {'TABLA_ID': ['Ntabla2'], 'DESCRIPCION': ['Descripcion2'], 'CAMPOS': [{'CAMPO': [{'CAMPO_ID': ['Ncampo21'], 'TIPO': ['Tcampo21']}, {'CAMPO_ID': ['Ncampo22'], 'TIPO': ['Tcampo22']}]}], 'FECHAHORA': ['Fechahora2']}]}
>
> Para extraer valores bastante sencillo. Pero para insertar, o modificar no tanto. Como parámetro le estoy pasando una lista de tuplas [("TABLA","Ntabla1"),("CAMPOS",""),("CAMPO","Ncampo11")]. Esto me devuelve {'CAMPO_ID': ['Ncampo11'], 'TIPO': ['Tcampo11']} (justo lo que necesito).
>
> Por favor díganme como puedo insertar campos nuevos y modificar valores de campos existentes.
>
Por lo que veo usas una estructura similar a xml (pero recuerda que en xml un tag
se cierra así: </tabla>)
Yo usaría una interfaz xml (dom o sax directamente) o si te resulta más cómodo
una capa tipo anobind [1], donde te convierte el doc xml en una estructura más __pithónica__
Creas un objeto y accedes a los distintos elementos como si fueran atributos del
objeto.
objeto.tablas.tabla[0].fechahora.text_content() Aquí tienes documentación de su uso [2]
Sobre el diseño, si vas a usar un tipo xml podrías simplificarlo bastante, por lo menos
algo así:
<tablas>
<tabla id="xxx">
<campos>
<campo id="zzz" tipo="yyy"/>
</campos>
<fechaHora>222222</fechaHora>
</tabla>
<!-- ... -->
</tablas>
[1] http://uche.ogbuji.net/uche.ogbuji.net/tech/4Suite/anobind/
[2] http://www.xml.com/pub/a/2003/08/13/py-xml.html
Un saludo,
--
Luis Miguel
No a las patentes de software en Europa
EuropeSwPatentFree
http://EuropeSwPatentFree.hispalinux.es
Más información sobre la lista de distribución Python-es