Herramientas de usuario

Herramientas del sitio


script:python:xtra

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
script:python:xtra [2011/09/23 11:35]
alfred
script:python:xtra [2020/05/09 09:25] (actual)
Línea 28: Línea 28:
             object.__setattr__(self,​ name, value)             object.__setattr__(self,​ name, value)
 </​code>​ </​code>​
- 
- 
-==== Recoger el contenido de una web ==== 
-Para ello usaremos la función ''​urlopen''​ que está en el módulo ''​urllib''​. Excepto en el constructor,​ los métodos para usarlos son... 
-<code python> 
-import urllib 
-f = urlopen(’http://​www.google.es’) 
-for linea in f: 
-    print linea[:-1] 
-f.close() 
-</​code>​ 
- 
  
  
Línea 153: Línea 141:
  
  
-==== Decodificando datos binarios ==== 
-=== Módulo binascii === 
-Existe el módulo ''​binascii''​ que trae distintas funciones para recoger los datos en un formato u otro: 
-<code python> 
-binascii.b2a_base64(data) 
-binascii.b2a_hex(data) 
-binascii.b2a_uu(data) 
-binascii.crc32(data,​ 0) 
-binascii.hexlify(data) 
-</​code>​ 
  
-=== Modulo array === 
-  * [[http://​docs.python.org/​library/​array.html]] 
-También podemos hacerlo mediante el módulo ''​array'',​ este define un objeto con un tipo concreto (caracteres,​ integers, floats...) el cual se indica en la creación que es de la siguiente forma: 
-<code python> 
-import array 
-a = array.array('​c',​ data) 
-</​code>​ 
-Siendo el primer parámetro pasado (''​c''​ en este caso) el tipo que es. Los tipos se definen por (c (caracter a partir de un byte), b, B, u, h (short a partir de dos bytes), H, i (integer a partir de dos bytes), I, l (long a partir de cuatro bytes), L, f (float a partir de cuatro bytes), d (doubles a partir de cuatro bytes)). 
  
-=== Modulo struct === 
-  * [[http://​docs.python.org/​library/​struct.html]] 
-Muy útil para la extracción de datos tipados de una cadena en bytes, y viceversa, pasar datos a cadena de bytes. \\  
-Para recoger datos utilizamos la función ''​unpack''​ a la cual se le pasa un formato (que se forma a partir de los valores de la siguiente tabla) y la cadena de bytes: 
-^ format ^ tipo leido ^ numero de bytes ^ 
-| c | char |  1 | 
-| b | byte |  1 | 
-| B | ubyte |  1 | 
-| h | short |  2 | 
-| H | ushort |  2 | 
-| i | int |  4 | 
-| I | uint |  4 | 
-| l | long |  4 | 
-| L | ulong |  4 | 
-| q | long (64b) |  8 | 
-| Q | ulong (64b) |  8 | 
-| f | float |  ? | 
-| d | double |  8 | 
-| s | char[] |  1 | 
-| p | char[] |  1 | 
-Con este formato podríamos indicar qué es lo que viene en la cadena de bytes pasada, por ejemplo, ''​cHIII''​ esperaría a leer de los bytes un carácter, un unsigned short y tres unsigned int, es decir, la cadena de bytes debería de tener 11 bytes. El ejemplo también lo podríamos escribir como ''​cH3I'',​ el resultado sería una lista. En el siguiente ejemplo se tiene un array de bytes (''​data''​) y se sabe que el primer es un número y el segundo un carácter. Luego también habría otro byte, pero este se imprimiría en la siguiente línea: 
-<code python> 
-print struct.unpack("​Bc",​ data[:2]) 
-print struct.unpack("​B",​ data[2:3]) 
-</​code>​ 
-El primer carácter del formato puede indicar hacia donde se dirigen los bytes, por ejemplo puede ser: 
-  * ''​!'':​ Como se envia por red. 
-  * ''<'':​ Little-endian. 
-  * ''>'':​ Big-endian. 
-Otras funciones útiles podrían ser ''​calcsize''​ que pasándole un formato indica qué tamaño debería de tener este: 
-<code python> 
->>>​ struct.calcsize('​hhl'​) 
-8 
-</​code>​ 
-O también podemos aprovechar el tipo ''​namedtuple''​ para crear objetos: 
-<code python> 
->>>​ from collections import namedtuple 
->>>​ Student = namedtuple('​Student',​ 'name serialnum school gradelevel'​) 
->>>​ Student._make(unpack('<​10sHHb',​ data)) 
-Student(name='​raymond ​  ',​ serialnum=4658,​ school=264, gradelevel=8) 
-</​code>​ 
- 
-Y si quisieramos leer de un archivo binario... 
-<code python> 
->>>​ import struct 
->>>​ f = file('​test.chm','​r'​) 
->>>​ s = f.read(4*1 + 3*4) 
->>>​ struct.unpack("​4s3I",​ s) 
-('​ITSF',​ 3L, 96L, 1L) 
-</​code>​ 
  
 ===== Sockets ===== ===== Sockets =====
Línea 322: Línea 242:
  
  
-===== Formatos de datos ===== 
-==== XML ==== 
-Para trabajar con XML en Python es necesario importar: ''​xml.dom.minidom''​. Ahora podemos... 
-  * Coger un archivo .xml: ''​archivo = xml.dom.minidom.parse("​archivo.xml"​)''​ 
-  * Mostrar código del archivo: ''​archivo.toxml()''​ 
-  * Coger elementos por el nombre: ''​elements = archivo.getElementsByTagName("​name"​)''​ 
-  * Acceder a los nodos de un elemento: ''​nodo = elements.item(0)''​ 
-  * Saber si un nodo tiene subnodos: ''​nodo.hasChildNodes()''​ 
-  * Coger los dubnodos subnodos: ''​subnds = nodo.childNodes''​ 
-  * Saber de un nodo... 
-    * nombre: ''​nodo.nodeName''​ 
-    * tipo: ''​nodo.nodeType''​ 
-    * valor: ''​nodo.nodeValue''​ 
-  * Coger atributos: ''​attr = nodo.attributes''​ 
-  * Coger un atributo con el nombre tal: ''​subn = attr.getNamedItem("​tal"​)''​ \\  
-//Si llegas a un nodo que tiene un valor, del estilo <​nombre>​nom</​nombre>,​ el nodo al que has llegado (nombre) tendrá como nodeName "​nombre"​ pero None como nodeValue, para ello tendrás que coger sus "​childNodes",​ entonces el primer elemento de los childNodes tendrá el nodeName a None, pero el nodeValue como "​nom"​.//​ 
-  * Para más información lee //"​Python and XML - An introduction.pdf"//​ en la sección de [[script:​python:​docs#​xml|documentos de xml]]. 
-  * Existen librerías para el trato avanzado de XML, mira en la sección de [[otros:​otros#​lista_de_librerias_y_frameworks|librerías]]. 
-  * {{script:​python:​pruebas_xml.zip|Ejemplos}} 
  
  
  
-==== JSON ==== 
-A partir de la versión 2.6 de Python podemos utilizar un encoder\decoder de json en Python ([[http://​docs.python.org/​library/​json.html]]). 
  
-===== SQLite y Python ===== 
-  * <​html><​a href="​myfiles/​script/​python/​sqlite_and_python.zip">​Documentación de SQLite y Python</​a></​html>​ 
-Desde la versión 2.5 de Python podemos utilizar el módulo ''​sqlite3''​ el cual nos permite acceder a una base de datos sqlite3. \\  
  
-==== Acciones básicas ==== 
-=== Conexión === 
-<code python> 
-import sqlite3 
-db = sqlite.connect("​c:​\\prueba.db"​) 
-</​code>​ 
-=== Ejecución de sql === 
-<code python> 
-c = db.cursor() 
-c.execute("​insert into data (id) values (1)") 
-db.commit() 
-</​code>​ 
-=== Ejecución de consulta === 
-<code python> 
-c = db.cursor() 
-c.execute("​select * from data") 
-for row in c: 
-  print row 
-</​code>​ 
-=== Funciones de un cursor === 
  
-  * ''​fetchall()'':​ Trae todo el resultado en una lista. 
- 
- 
- 
-==== Acciones avanzadas ==== 
-=== Insertar una fecha === 
-<code python> 
->>>​ t = time.localtime() 
->>>​ ts = sqlite3.Timestamp(t[0],​ t[1], t[2], t[3], t[4], t[5]); 
->>>​ c.execute ("​insert into fecha (fecha) values (?)", (ts,)) 
-</​code>​ 
-=== Insertar un blob === 
-<code python> 
-query = u'''​insert into data VALUES(?, ?​)'''​ 
-c = db.cursor() 
-b = sqlite3.Binary(data) 
-c.execute(query,​(id,​b)) 
-db.commit() 
-</​code>​ 
- 
- 
- 
- 
-===== Programación Win32===== 
-  * [[http://​sourceforge.net/​projects/​pywin32/​]] 
- 
-==== API Win32 ==== 
-Una vez instalado el paquete PyWin podremos acceder a la api de Windows mediante el módulo ''​win32gui''​. Las constantes para este las encontraremos en ''​win32con''​. 
-<code python> 
->>>​ import win32gui as gui 
->>>​ import win32con as con 
->>>​ bsp = gui.FindWindow("​BSPlayer",​ None) 
->>>​ bsp 
-525126 
->>>​ bsp_cmd = con.WM_USER + 2 
->>>​ gui.SendMessage(bsp,​ bsp_cmd, 0x10000, 0) 
-</​code>​ 
- 
-==== COM ==== 
-Mediante Python podemos acceder a objetos COM, esto nos permite desarrollar para programas (ya sean tareas automatizadas,​ plugins, scripts...). Para ello al instalar Python en Windows se nos agrega un paquete denominado PythonCOM que nos permite enlazar fácilmente estas dos tecnologías,​ viene también con una herramienta denominada ''​Makepy''​ que genera código Python que adapta y enlaza la interface COM elegida a nuestro código. \\  
-Hay dos formas de ejecutar Makepy: 
-  * Lanzando el script ''​make.py''​ dentro del directorio ''​win32com''​. 
-  * Desde ''​PythonWin''​ -> //Tools// -> ''​COM Makepy utility''​. Esta agregaráa autocompletado al código que escribiesemos. 
- 
-Para enlazar código COM... :?: 
-<code python> 
-import win32com.client 
-Visum = win32com.client.Dispatch ("​visum.visum.11"​) 
-</​code>​ 
  
 ===== Programación web con Python ===== ===== Programación web con Python =====
script/python/xtra.1316777725.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)