Entradas etiquetadas con Python
Funciones reducidas en Python
28 abr
Hola a todos,
La idea de esta entrada es poner las funciones reducidas que he y hayan programado. Lo ideal es ver cuán cortas pueden ser.-
Aquí comparto algunas
strlen / len Forma normal
def s(x): i = 0 for l in x: i += 1 return i
Forma corta
def l(x): return sum(1 for i in x) l = (lambda x: sum(1 for i in x))
Contar espacios de una cadena Forma normal
def v(x): i = 0 for l in x: if l == ' ': i += 1 return i
Forma corta
def k(x): return sum(1 for i in x if i == chr(32))
Con el paso del tiempo, espero ir agregando más.
Escáner de códigos Qr en Python (Android)
2 abr
Recién instalé SL4A en mi móvil, y decidí programar algo en Python. De esto, surgió el pyScanBarcode.py
No siendo más, acá dejo el código
#-*- coding: utf-8 -*- import android droid = android.Android() sCode = droid.scanBarcode() #Debug #print sCode (sRslt, sType) = sCode.result['extras']['la.droid.qr.result'], sCode.result['extras']['SCAN_RESULT_FORMAT'] QMSG = ''' by .:WindHack:. Tipo: %s Contenido: %s''' % (sType, sRslt) droid.dialogCreateAlert('Resultado del Escáner', QMSG) if sRslt.startswith('http'): droid.dialogSetPositiveButtonText('Abrir') droid.dialogSetNeutralButtonText('Copiar contenido') droid.dialogSetNegativeButtonText('Cerrar') droid.dialogShow() sResponse = droid.dialogGetResponse().result if sResponse['which'] == 'positive': droid.view(sRslt) elif sResponse['which'] == 'neutral': droid.setClipboard(sRslt) droid.notify('pyScanBarcode', 'Contenido copiado con éxito. ¡Gracias!') elif sResponse['which'] == 'negative': exit()
Resolver lista de ecuaciones cuadráticas en Python
25 mar
Hoy vengo a presentar un script que tuve que realizar para un reto de un Wargame.
El reto en sí, era resolver una gran lista de ecuaciones (aproximadamente 1.000), y posteriormente sumar todos sus resultados (enteros, nada más).
Ej. 78x^2+8x-41446 66x^2+62x-124700 21x^2+15x-81654
Resultados: (23.0, -23.102564102564102) (43.0, -43.939393939393938) (62.0, -62.714285714285715)
Respuesta: 23 + 43 + 62 = 128
No siendo más, aquí dejo el código.
#-*- coding: utf-8 -*- from math import sqrt #Función para resolver las ecuaciones. def sSolve(a,b,c): (x1,x2) = (-b + sqrt(b ** 2 - 4*a*c))/(2*a),(-b - sqrt(b ** 2 - 4*a*c))/(2*a) return (x1,x2) #Abrir el archivo con todas las ecuaciones que se deben resolver. sFile = open('quadratic.txt','r') #Variable para el resultado total. tTotal = 0.0 #Bucle para recorrer línea a línea el archivo. for line in sFile: #Índices para buscar los términos a, b y c. iA = line.find('x^2+') iB = line.find('x-') #Agrupar los valores correspondientes en una tupla (Convertidos en integer) (a, b, c) = int(line[:iA]),int(line[iA+4:iB]),int(line[iB+1:]) #Resolver... rRes = sSolve(a,b,c) #Sumar respuestas válidas (Enteras). tTotal += rRes[0] #Cerrar el archivo. sFile.close() #Imprimir en pantalla el total. print tTotal
Uploader de imágenes (Imageshack & Imgur) en Python
24 mar
Hace algún tiempo que no programaba algo interesante en Python, así que en un ataque de ánimo, me decidí a hacer este pequeño script. Básicamente es un uploader de imágenes el cual funciona mediante consola, los archivos pueden ser subidos a Imageshack/Yfrog e Imgur. Vale decir que es necesario tener instalado pycurl para que funcione correctamente.
Modo de uso
Usage: pymgUploader.py [Options] filename
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-u SERVICE, --uploadTo=SERVICE
write the service to upload image. (Options: Imageshack or Imgur)
Si se corre bajo Linux, se puede ejecutar de la siguiente forma:
~ $ chmod +x pymgUploader.py ~ $ ./pymgUploader.py -h ... ~ $ python pymgUploader.py -h
Ejemplo
~ $ ./pymgUploader.py -u Imageshack '/home/windhack/Imágenes/Pantallazo del 2012-03-22 23:08:28.png' http://img707.imageshack.us/img707/699/pantallazodel2012032223.png http://yfrog.com/jnpantallazodel2012032223p
#!/usr/bin/python #-*- coding: utf-8 -*- ############################# # Developed by .:WindHack:. # # www.daw-labs.com # # www.cibernodo.net # ############################# import pycurl, StringIO, os, optparse def sUploadImage(sService, sFilename): sResponse = StringIO.StringIO() cUrl = pycurl.Curl() if sService == 'imageshack': sParams = [('key','4678EFIYcc556e5f788bae3495854ead3a08757d'), ('fileupload',(pycurl.FORM_FILE,sFilename))] cUrl.setopt(pycurl.URL,'http://www.imageshack.us/upload_api.php') elif sService == 'imgur': sParams = [('key','c7bb4891711492c98ffedb0841cd9464'), ('image',(pycurl.FORM_FILE,sFilename))] cUrl.setopt(pycurl.URL,'http://api.imgur.com/2/upload.xml') cUrl.setopt(pycurl.HTTPPOST, sParams) cUrl.setopt(pycurl.WRITEFUNCTION, sResponse.write) cUrl.perform() cUrl.close() return sResponse.getvalue() def GetPosText(sTextA, sTextB, sSource): A = sSource.find(sTextA) B = sSource.find(sTextB) sSource = sSource[A+len(sTextA):B] return sSource def xmlParser(sService, sXML): if sService == 'imageshack': sTagsA = ['<image_link>', '<yfrog_link>'] sTagsB = ['</image_link>', '</yfrog_link>'] elif sService == 'imgur': sTagsA = ['<original>', '<imgur_page>'] sTagsB = ['</original>', '</imgur_page>'] sInfo = [] for i in range(len(sTagsA)): sInfo.append(GetPosText(sTagsA[i],sTagsB[i],sXML)) return sInfo def myMain(): oParser = optparse.OptionParser(usage='usage: Más >
Psyco: acelera tus aplicaciones
26 ene
Psyco es un módulo que nos permite mejorar la velocidad de nuestros programas a cambio de un pequeño tiempo de inicialización. Esto se logra a partir de la compilación de código.
Para que Psyco compile tanto código como sea posible, sólo hay que añadir:
import psyco psyco.full()
Pero para aplicaciones complejas, la función full no será de ayuda puesto que necesitará mucho tiempo y memoria. En este caso, podemos recurrir a la función profile la cual analizará el código y estudiará que funciones merece la pena compilar.
import psyco psyco.profile()
También sería útil llamar a la función log mediante la cual psyco crea un archivo de texto con el tiempo de ejecución y la memoria utilizada para el programa y también nos informará de cualquier problema que se pueda haber encontrado.
Podemos indicarle la función, clase o métido explicitamente a través de la función bind
import psyco psyco.log() psyco.profile()
Podemos indicarle la función, clase o métido explicitamente a través de la función bind.
import psyco psyco.bind(la_funcion)
Fuente: Cibernodo Más Información
Instalar Python (y otros) en Android
26 ene
Hace poco, por curiosidad, busqué una forma de instalar el intérprete de Python* en Android. Googleando un poco, di con unas aplicaciones que permiten portar y usar estos intérpretes de forma nativa en este sistema.
* Aplica para varios lenguajes más, el proceso es el mismo.
1. Requisitos- Un dispositivo con Android 2.0 o superior.
- El AC SWM (AndroidCentral Sideload Wonder Machine)
2. Instalando el SL4A
El SL4A es un software que gestiona la instalación de intérpretes, ejecución, edición y manipulación de scripts. Para poder continuar con este tutorial es indispensable que lo instalemos.
2.1 Instalar desde el dispositivo Es básicamente el método más sencillo. Debes navegar por la página de descargas del SL4A y bajar la versión más reciente (sl4a_r4.apk). Una vez descargada, la instalas normalmente.
NOTA: Para usar este método hay que tener activa la opción de ”Orígenes desconocidos“ en Ajustes -> Aplicaciones.
2.2 Instalar desde el PC Si por cualquier extraña razón el primer método no funciona (como en mi caso), tenemos esta opción. En este caso, usaremos la aplicación AC SWM (AndroidCentral Sideload Wonder Machine).
Conectamos el móvil en modo ‘Depuración’, luego seleccionamos el .apk y damos clic en Install. Más información sobre este método
3. Instalando el Intérprete
Como en el caso anterior, se pueden instalar los intérpretes mediante dos métodos.
3.1 Instalar desde el dispositivo Vamos a abrir el SL4A. Te aparecerá una ventana como esta:
Abre el menú “View” Más >
Copiar imágenes del caché de Windows Live Messenger
9 oct
Windows Live Messenger, guarda todas las imágenes de los contactos y las que se hayan compartido en una carpeta llamada “MessengerCache“. Pues bien, si se entra en esa carpeta (C:\Users\Usuario\AppData\Local\Temp\MessengerCache) se pueden ver gran cantidad de archivos sin extensión, los cuales corresponden, efectivamente, a varias imágenes.
Es una tarea tediosa renombrar manualmente uno a uno cada archivo para agregarle la extensión, así que, como debía buscar una foto se me ocurrió hacer un script en Python (quedó algo feo) que me automatizara esta tarea.
Sin más qué decir, aquí está:
# -*- coding: utf-8 -*- import os, shutil Username = os.environ['USERPROFILE'] Path = r'%s\AppData\Local\Temp\MessengerCache' % Username #Carpeta destino. Dest = 'C:\\WindowsLiveMessenger\\' #Si no existe el directorio, lo creamos. if not os.path.isdir(Dest): os.mkdir(Dest) #Nos posicionamos en el directorio del Caché. os.chdir(Path) #Listo los archivos que hay en el directorio. sFiles = os.listdir('.') print 'Hay un total de %i archivos' % len(sFiles) print 'Se están copiando las imágenes...' #Copio cada archivo con su respectiva extensión. for sFile in sFiles: if os.path.isfile(sFile): shutil.copy(sFile,Dest+sFile+'.jpg') print 'Tarea terminada.'
Variaciones: Sucesión de Fibonacci
17 jul
Pasando el tiempo, me dio por leer un poco sobre la Sucesión de Fibonacci. Gracias a ello, hice en Python dos formas para realizar esta sucesión
No siendo más, aquí os las dejo:
from math import sqrt, pow def f(x): return ((1/sqrt(5))*pow(((1+sqrt(5))/(2)),x)-(1/sqrt(5))*pow(((1-sqrt(5))/(2)),x))
from math import sqrt, pow a = 1.61803398874989 f = lambda x: (pow(a,x)- pow(-a,-x))/ sqrt(5) for i in range(25): print f(i)
Y en menos líneas…
from math import sqrt, pow a = 1.61803398874989 for i in range(25): print (lambda x: (pow(a,x)-pow(-a,-x))/sqrt(5))(i)
XSSPloit: Un escáner de vulnerabilidades XSS
17 jul
XSSploit es un escáner multi-plataforma de Cross-Site Scripting y exploiter escrito en Python. Se ha desarrollado para ayudar a descubrir y explotar las vulnerabilidades XSS en pruebas de penetración.
Cuando se utiliza, XSSploit primero se arrastra todo el sitio web e identifica las formas encontradas. A continuación, analiza estas formas de detectar automáticamente las vulnerabilidades existentes XSS, así como sus principales características.
Las vulnerabilidades que se hayan descubierto puede ser explotadas mediante un motor de explotacion del XSSploit. Esta funcionalidad extensible permite elegir el comportamiento deseado y genera automáticamente el enlace HTML con el payload del exploit embebido.
Requisitos: - Python 2.5 - Wxpython
Script para descargar fondos de pantalla
7 jul
Teniendo en cuenta el tip que encontré sobre GNOME ( pueden ver haciendo clic aquí ), decidí por hacer un script en Python que facilitara un poco la tarea. Es algo sencillo y simple, lo hice sólo para entretenerme un rato.
#!/usr/bin/python # -*- coding: utf-8 -*- from ftplib import FTP import re, urllib, os def ArrayFilter(lList, sScreen): pReg = re.compile(r'.+'+sScreen+'.{4,5}') nList = [] for i in lList: iterator = pReg.finditer(i) for match in iterator: nList.append(match.group()) return nList def WriteFileAndDownload(sFilenames): tFile = open(os.environ['HOME']+'/tmpWall.txt','wb') for i in sFilenames: tFile.write('ftp://ftp.gnome.org/pub/GNOME/teams/art.gnome.org/backgrounds/'+i+'\n') tFile.close() os.system('wget -i '+os.environ['HOME']+'/tmpWall.txt') def DownloadWallpapers(sResolution): ftp = FTP('ftp.gnome.org') ftp.login() ftp.cwd('pub/GNOME/teams/art.gnome.org/backgrounds') lWalls = ArrayFilter(ftp.nlst(),sResolution) ftp.close() if len(lWalls) > 0: print 'Hay un total de: ',len(lWalls),' wallpapers' opD = raw_input('==> ¿Desea descargarlos todos? (s/n) >>> ') if opD.upper() == 'S': WriteFileAndDownload(lWalls) else: sLimit = input('==> ¿Cuántos desea descargar? >>> ') WriteFileAndDownload(lWalls[0:sLimit]) else: print 'No hay wallpapers con ese tamaño. Adèu' Resolution = raw_input('\nIngrese la resolución de su pantalla (ej. 1024x768) >>> ') DownloadWallpapers(Resolution)

