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/22 15:22]
alfred
script:python:xtra [2020/05/09 09:25] (actual)
Línea 1: Línea 1:
 ====== Xtra (Python) ====== ====== Xtra (Python) ======
 +
  
  
Línea 28: Línea 29:
 </​code>​ </​code>​
  
-  * Ejecutar un fichero python: ''​execfile( fichero )''​ 
-  * Recoger los parámetros al ejecutable: ''​sys.argv''​ 
-  * Ruta del ejecutable: os.getcwd() <- Si pides los parámetros del ejecutable, el primero es el nombre del archivo, la ruta del ejecutable sólo es la ruta, sin el nombre del archivo .py. Se podría decir pues que los argumentos son: ''​sys.argv[1:​]''​ 
-  * Saber tamaño fichero: ''​os.path.getsize( fichero )''​ 
  
-==== 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>​ 
  
  
- 
-==== Lanzar un ejecutable ==== 
-<code python> 
-import os 
-args = [] 
-print os.execv(('​c:​\\calc.exe'​),​ args) 
-</​code>​ 
-Aunque en Windows me ha funcionado mejor: 
-<code python> 
-import os 
-def start (program, *args): 
-   ​return os.spawnv(os.P_NOWAIT,​ program, (program,) + args) 
-start("​C:​\\Archivos de programa\\Webteh\\BSplayerPro\\bsplayer.exe"​) 
-</​code>​ 
-... o ... 
-<code python> 
-import subprocess 
-subprocess.Popen([r'​C:​\Archivos de programa\Webteh\BSplayerPro\bsplayer.exe',''​]) 
-</​code>​ 
  
 ==== Recoger variables del sistema ==== ==== Recoger variables del sistema ====
Línea 95: Línea 64:
  print b,  print b,
 </​code>​ </​code>​
-==== Listas ==== 
-<code python> 
->>>​ listOfWords = ["​this","​is","​a","​list","​of","​words"​] 
->>>​ items = [ word[0] for word in listOfWords ] 
->>>​ print items 
-['​t',​ '​i',​ '​a',​ '​l',​ '​o',​ '​w'​] 
  
->>>​ item = [x+y for x in '​flower'​ for y in '​pot'​] 
->>>​ print item 
-['​fp',​ '​fo',​ '​ft',​ '​lp',​ '​lo',​ '​lt',​ '​op',​ '​oo',​ '​ot',​ '​wp',​ '​wo',​ '​wt',​ '​ep',​ '​eo',​ '​et',​ '​rp',​ '​ro',​ '​rt'​] 
  
->>>​ zeros=[0]*5 
->>>​ print zeros 
-[0, 0, 0, 0, 0] 
  
->>>​ [1,2] + [3,4] 
-[1, 2, 3, 4] 
  
->>>​ list = [2, 4, “usurp”,​ 9.0,​”n”] 
->>>​ list[3:] 
-[9.0, ‘n’] 
- 
->>>​ list[1:4] = [“opportunistic”,​ “elk”] 
->>>​ list 
-[2, ‘opportunistic’,​ ‘elk’, ‘n’] 
- 
->>>​ list[:0] = [3.14,2.71] 
->>>​ list 
-[3.14, 2.71, 2, ‘opportunistic’,​ ‘elk’, ‘n’] 
- 
->>>​ v =[1, 2, 4, 6,5] 
->>>​ v[3:3] = [31] 
->>>​ v 
-[1, 2, 4, 31, 6, 5] 
-</​code>​ 
- 
-==== Excepciones ==== 
-<code python> 
-try: 
-    raise Exception() 
-except: 
-    print "​Sorry:",​ sys.exc_type + ":",​ sys.exc_value 
- 
-try: 
-    raise Exception("​Fallo!"​) 
-except: 
-    print sys.exc_value 
- 
-try: 
-    import Image 
-except ImportError,​ exc: 
-    raise SystemExit("​PIL must be loaded to run this example"​) 
-</​code>​ 
  
  
Línea 172: Línea 92:
  
  
-==== Fechas ====+
  
  
Línea 221: 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 390: 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 =====
Línea 636: Línea 395:
 ==== Notas ==== ==== Notas ====
   * Para más info. mira los [[script:​python:​docs#​metaclases|documentos de metaclases]].   * Para más info. mira los [[script:​python:​docs#​metaclases|documentos de metaclases]].
 +
  
  
Línea 644: Línea 404:
 ===== In a nutshell ===== ===== In a nutshell =====
   * Instalar un módulo descomprimido,​ desde consola: ''​python setup.py install''​   * Instalar un módulo descomprimido,​ desde consola: ''​python setup.py install''​
-  * Asignación condicional (o operador ternario):​ +
-<code python>​ +
-mensaje = "​muchas visitas"​ if visitas_diarias>​1400 else "pocas visitas"​ +
-</​code>​+
   * Saber si una variable está declarada:   * Saber si una variable está declarada:
 <code python> <code python>
Línea 655: Línea 412:
   pass   pass
 </​code>​ </​code>​
 +
 ==== Funciones ==== ==== Funciones ====
   * ''​hex'' ​   * ''​hex'' ​
   * ''​bin''​ (a partir de la 2.6), pasa a binario.   * ''​bin''​ (a partir de la 2.6), pasa a binario.
   ​   ​
 +
  
 ==== Moverse por el código ==== ==== Moverse por el código ====
 === General === === General ===
-Ver el contenido y documentación de un elemento: 
-<code python> 
->>>​ dir(os) 
-</​code>​ 
 Ver la documentación de un elemento: Ver la documentación de un elemento:
 <code python> <code python>
 >>>​ Element.__doc__ >>>​ Element.__doc__
 </​code>​ </​code>​
-Ver los elementos disponibles:​ 
-<code python> 
->>>​ dir() 
-</​code>​ 
-Ver ayuda del entorno: 
-<code python> 
->>>​ help() 
-</​code>​ 
-Ver ayuda para un elemento: 
-<code python> 
->>>​ help(element) 
-</​code>​ 
- 
  
 ==== Sobre clases ==== ==== Sobre clases ====
script/python/xtra.1316704966.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)