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