# -*- coding:utf-8 -*-
# Author: Jesús Mager
# Licence: GPL v.3
import os, sys
import Image
if len(sys.argv) != 3:
print "Syntaxis: imgsize.py xsize ysize"
exit()
else:
try:
x = int(sys.argv[1])
y = int(sys.argv[2])
except ValueError:
print "The arguments must be integers."
exit()
size = x,y
def makethumb(inf):
out = inf + ".new"
if inf.split(".")[-1]=="new":
print "%s: Skiped" % inf
return 0
if inf is not out:
try:
im = Image.open(inf)
im.thumbnail(size, Image.ANTIALIAS)
im.save(out, "JPEG")
print "%s: Done" % inf
except IOError:
print "Error opening %s" % inf
if __name__ == "__main__":
files = [ f for f in os.listdir(".") if os.path.isfile(os.path.join(".",f)) ]
for f in files:
makethumb(f)
Mostrando entradas con la etiqueta python. Mostrar todas las entradas
Mostrando entradas con la etiqueta python. Mostrar todas las entradas
martes, 30 de diciembre de 2014
Python: Convertir todos las las imágenes de una carpeta a otro tamaño.
Pequeño script que convierte todas las imágenes de una cierta carpeta a un nuevo tamaño que se especifica en los argumentos de la línea de comandos.
lunes, 21 de noviembre de 2011
Flask: Un mundo poderoso y minimalista para la programación Web
He descubierto el mundo de los "microframework"s en Python. Estoy tratando de escribir un nuevo proyecto web, con la intención de hacerlo a mi medida. La herramienta tradicional: Django. que suelo utilizar me ha comenzado a poner piedras en el camino al querer hacer ciertas cosas que no están dentro del estándar.
Al investigar, me tomé la molestia de experimentar con varias alternativas. Entre ellas TG, pyramid, cherrypy, web2py, etc... Pero me encantó la elegancia de Flask. Ya con anterioridad había llegado a la página, pero no me había tomado la molestia de revisar su documentación. Resulta ser una de las aplicaciones mejor documentadas, minimalistas, pero a la vez flexibles para todo los que necesito.
En mi proyecto utilizaré Jinja2 (que es por cierto mi sistema de Templates preferido) y que viene integrado desde la caja con Flask, junto con el ORM SQLAlchemy, que tiene una exención hecha para Flask. Les presento un rápido extracto de código para que se puedan dar una idea de lo confortable que es trabajar con este microframework.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello World'
if __name__ == '__main__':
app.run()
Para más información pueden visitar la página de Flask en http://flask.pocoo.org/ Estaré informando de las diversas dificultades, que seguramente enfrentaré, al desarrollar mi proyecto.
sábado, 3 de septiembre de 2011
Usuarios independientes en el Admin de Django
Muchas veces los programadores de Django quieren usar la poderosa herramienta del Admin para permitir funcionar como un centro de administración para los diversos usuarios que se registran en un sitio. Pero al generar usuarios de staff con acceso al admin, estos pueden editar cualquier campo, a pesar de no ser el suyo. Para evitar esto, es posible configurar nuestro archivo admin.py para sobre heredar el administrador y sobre escribir dos funciones. Veamos el código:
Tomando en cuenta que hemos declarado en models.py los necesarios campos, como lo es added_by como foreign key a User, de Auth. Espero ayude!
from django.contrib import admin
from myproject.pages.models import pagesPage
class pagesPageAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if getattr(obj, 'added_by', None) is None:
obj.added_by = request.user
obj.last_modified_by = request.user
obj.save()
def queryset(self, request):
qs = super(pagesPageAdmin, self).queryset(request)
#If super-user, shows all rows
if request.user.is_superuser:
return qs
return qs.filter(added_by=request.user)
admin.site.register(pagesPage, pagesPageAdmin)
Tomando en cuenta que hemos declarado en models.py los necesarios campos, como lo es added_by como foreign key a User, de Auth. Espero ayude!
martes, 26 de enero de 2010
Proyecto Kickapoo
En los pasados días he trabajado para desempolvar un viejo proyecto que he tenido guardado. Se trata de Kickapoo, un web spider que extrae información de páginas MySpace utilizando BeautifulSoup, guardando la información en una base de datos mappeada con SQLALchemy. En lo general ya funcion, pero, claro está que hay que pulir el web spider aún más para no perder tanta información hasta ahora.
Principalmente busca por páginas con información acerca de native american, trata de clasificar de que tríbu son utilizando los lugares de residencia. Esto es una presunción que realiza el programa.
El siguiente paso en el proyecto es lograr llevar esta información a un algoritmo de clustering de aprenizaje no asistido para poder agrupar a las diversas personas en categorías de intereses.
Tambien pretendo realizar, con la información estable del MySpace un poco de estadística descriptiva ilustrando los resultados de la investigación.
He publicado el código bajo GPLv3 para que todos puedan ver y reusar el código.
Lo pueden encontrar bajo: https://sourceforge.net/projects/kickapoo/
y pueden navegar por código en: http://kickapoo.svn.sourceforge.net/viewvc/kickapoo/
Por último pueden crear una copia local con: svn co https://kickapoo.svn.sourceforge.net/svnroot/kickapoo kickapoo
Principalmente busca por páginas con información acerca de native american, trata de clasificar de que tríbu son utilizando los lugares de residencia. Esto es una presunción que realiza el programa.
El siguiente paso en el proyecto es lograr llevar esta información a un algoritmo de clustering de aprenizaje no asistido para poder agrupar a las diversas personas en categorías de intereses.
Tambien pretendo realizar, con la información estable del MySpace un poco de estadística descriptiva ilustrando los resultados de la investigación.
He publicado el código bajo GPLv3 para que todos puedan ver y reusar el código.
Lo pueden encontrar bajo: https://sourceforge.net/projects/kickapoo/
y pueden navegar por código en: http://kickapoo.svn.sourceforge.net/viewvc/kickapoo/
Por último pueden crear una copia local con: svn co https://kickapoo.svn.sourceforge.net/svnroot/kickapoo kickapoo
lunes, 3 de agosto de 2009
Script Python para convertir codigo fuente a HTML
Como ya me estoy cansado y harto de que blogger no tenga un módulo para manejar Source Code de diferentes lenguajes escribí una pequeño script que convierte los codigos fuentes en codigo HTML. Es muy simple y puede ser modificable.
# !/usr/bin/env python
# coding: utf-8
# This is a simple script that converts
# source code to a web ready format.
# It is usefull for blogs like blogger
# that don't have a source code plugin.
#
# File: webready.py
# Author: Jesus Manuel Mager Hois
# Licencia: GPL 3 2009
#
import sys
symbols = {
'<':'<',
'>':'>',
'&':'&',
'\n':''
}
try:
archivo = sys.argv[1]
except:
print '\nUsage: python webready.py inputfile\n'
sys.exit()
try:
FILE = open(archivo, 'r')
except:
print '\nERROR: ' + archivo + ' does not exist.\n'
sys.exit()
print '<div style="border-style: dashed; border-width: thin;background-color:#FFFFFF"><pre>'
for lines in FILE.readlines():
for key, value in symbols.items():
lines=lines.replace(key, value)
print lines
print '</pre></div>'
FILE.close()
viernes, 26 de junio de 2009
Accediendo un servidor ftp con python usando ftplib
Es común necesitar automatizar ciertas tareas al interactuar con un servidor ftp. Por lo tanto tenemos una fácil opción de interactuar desde nuestro script python con el servidor remoto con una librería estándar muy util: ftplib. No debemos tener problemas con instalación o cualquier otra configuración pues esta librería viene por defecto con la instalación básica de python.
Para importar el objeto ftp simplemente usaremos
el primer método con el que nos veremos relacionados es el constructor que en el cual podemos llevar acabo toda la conexión, su sintaxis es la siguiente:
hacemos la conexion:
Y hemos entablado la comunicación con el servidor ftp. Ahora veamos algunos métodos comunes en el manejo ftp.
Para crear un nuevo directorio remoto
Para cambiar a un nuevo directorio de trabajo remoto
pwd nos muestra el directorio actual en el que nos encontramos.
Finalmente el famoso dir, que nos mostrara el contenido del directorio actual en la salida estándar de nuestro prompt
Ahora bien, para cargar un archivo de forma binaria se utiliza:
Y para descargar un archivo en forma binaria al directorio de trabajo local actual:
Finalmente, para eliminar un archivo remoto:
Y para eliminar un directorio
espero este breve recorrido por el uso de los comandos ftp haya sido útil para todos...
Para importar el objeto ftp simplemente usaremos
from ftplib import FTP
el primer método con el que nos veremos relacionados es el constructor que en el cual podemos llevar acabo toda la conexión, su sintaxis es la siguiente:
class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])
hacemos la conexion:
host = “ftp.host.org”
user = “juan”
passwd= “secreto”
tp = FTP(host, user, passwd)
Y hemos entablado la comunicación con el servidor ftp. Ahora veamos algunos métodos comunes en el manejo ftp.
Para crear un nuevo directorio remoto
ftp.mkd('galeria')Para cambiar a un nuevo directorio de trabajo remoto
ftp.cwd('galeria')pwd nos muestra el directorio actual en el que nos encontramos.
ftp.pwd()
/htdocs/galeria
Finalmente el famoso dir, que nos mostrara el contenido del directorio actual en la salida estándar de nuestro prompt
ftp.dir()Ahora bien, para cargar un archivo de forma binaria se utiliza:
f = open('imagen.png', 'rb')
ftp.storbinary('STOR imagen.png', f)
f.close()
Y para descargar un archivo en forma binaria al directorio de trabajo local actual:
ftp.retrbinary('RETR imagen.png', open('imagen2.png', 'wb').write)
Finalmente, para eliminar un archivo remoto:
ftp.delete('imagen.png')Y para eliminar un directorio
ftp.rmd('galeria')espero este breve recorrido por el uso de los comandos ftp haya sido útil para todos...
Suscribirse a:
Entradas (Atom)