Gestión de múltiples versiones de pyton en Ubuntu
– Paso previo, añadir software-properties-common y repositorio.
sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa
– Instalación de las versiones de python: 3.10 y 2.7.
sudo apt install python3.10 python3.10 --version sudo apt install python2.7 python3.7 --version
– Configuración de ubuntu para facilitar el cambio de una version a otra.
//Creas enlaces simbolicos con update-alternatives sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 2 //Menu para seleccionar la version elegida sudo update-alternatives --config python //comprobar la versión activa python --version
Parámetros externos en Python
Ejemplo de configuración en el eclipse de parámetros externos para una aplicación realizada en python.
Como se puede ver para leerlos es simplemente:
import sys .... variable = sys.argv[1]
Uso de wait en Selenium
En los test de selenium podemos esperar a que se ejecuten determinadas acciones para facilitar el testeo de las web.
Ejemplo 1: Este ejemplo espera hasta 10 segundos antes de lanzar una excepción TimeoutException a menos que encuentre el elemento myDynamicElement para regresar dentro de 10 segundos.
Es interesante combinarlo con las ExpectedConditions aunque también se puede hacer consulta estática.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get("http://somedomain/url_that_delays_loading") try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: driver.quit()
Ejemplo 2: En este se establece 10 segundos como el tiempo de espera máxima para buscar cualquier elemento.
from selenium import webdriver driver = webdriver.Firefox() driver.implicitly_wait(10) # seconds driver.get("http://somedomain/url_that_delays_loading") myDynamicElement = driver.find_element_by_id("myDynamicElement")
Logging en python
Ejemplo de configuración de log para python. Se utiliza un fichero de configuracion llamado logging.conf, donde se definen dos manejadores uno a nivel de consola StreamHandler y otro a nivel de fichero FileHandler.
– StreamHandler: Escribirá en la salida estandar del sistema las trazas con nivel INFO.
– FileHandler: Escribirá en un fichero llamado Result_Operations.log las trazas con nivel DEBUG.
En ambos se formatean los mensajes para que sólo muestre el contenido del mensaje.
from logging import config .... logging.config.fileConfig('logging.conf') logger = logging.getLogger('root') logger.debug("mensaje para el FileHandler") logger.info("mensaje para ambos")
logging.conf
[loggers] keys=root [handlers] keys=FileHandler,consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=FileHandler,consoleHandler [handler_FileHandler] class=FileHandler level=DEBUG formatter=simpleFormatter args=("Result_Operations.log",) [handler_consoleHandler] class=StreamHandler level=INFO formatter=simpleFormatter args=(sys.stdout,) [formatter_simpleFormatter] format= %(message)s datefmt=
Documentación oficial logging python
Documentación de los tipos de manejadores
SyntaxError: Non-ASCII character ‘\xe9’
En python para definir la codificación del archivo se puede colocar al inicio del archivo la siguiente línea de código.
# -*- coding: utf-8 -*-
De esta forma se solucionan los errores del tipo: Non-ASCII character ‘\xe9’
Modificar el tamaño de una imagen y añadir una marca de agua en python
Pillow es una variante (o fork) de la popular librería PIL (Python Image Library) que permite procesar con facilidad imágenes con Python 2.x/3.x.
Permite consultar información básica de una imagen como su tamaño, el formato que tiene, el tipo de imagen (bits/pixel, BN/color, etc.), es posible cambiar su tamaño, recortar un área, girar, aplicar filtros y efectos, convertir el tipo de imagen y su formato, etc.
Para instalar la librería basta con ejecutar el comando.
pip install Pillow
Un ejemplo de uso puede ser:
import PIL from PIL import Image img = Image.open("C:\\foto.jpg") img = img.resize((500, 500), Image.ANTIALIAS) imgAgua= Image.open("C:\\agua.jpg") img.paste(imgAgua, (25, 25)) img.save("C:\\imagenFinal.jpg")
En el ejemplo se abre la imagen foto.jpg para redimensionarla a un ancho y alto de 500px.
Además, se le añade encima una imagen agua.jpg en las coordenadas 25,25 a modo de marca de agua o firma.
Descargar imágenes de la web usando Python
Existen distintos métodos para descargarse imágenes de la web desde una aplicación python. A continuación vamos a exponer dos ejemplos:
Ej 1/ Utilizando el módulo httplib
import httplib ... ''' Se conecta con el servidor y se hace la petición de la imagen ''' conn = httplib.HTTPConnection("www.url.com") conn.request ("GET", '/img/imagen.jpg') r = conn.getresponse() ''' se guarda la imagen en disco mediante la creación de un fichero ''' fichero = file( '/home/img/imagen.jpg', "wb" ) fichero.write(r.read()) fichero.close() ...
Ej 2/ Utilizando los módulos PIL, urllib y StringIO
from PIL import Image from urllib import urlopen from StringIO import StringIO ''' Se descarga la imagen y se almacena en una cadena ''' URL = 'http://www.url.com/img/imagen.jpg' data = urlopen(URL).read() ''' Se convierte a fichero con StringIO y luego se convierte en imagen ''' file = StringIO(data) img = Image.open(file) ''' Se almacena en disco ''' img.save('/home/img/imagen.jpg')
Python throws UnicodeEncodeError
Documentación oficial Caracteres Unicode en Python
Ejemplo:
''' Se declara una variable con caracteres unicode ''' >>> u = unichr(40960) + u'abcd' + unichr(1972) >>> u.encode('utf-8') '\xea\x80\x80abcd\xde\xb4' ''' Se aplica un encode ASCII para la conversión de la variable. Se puede ver que falla. ''' >>> u.encode('ascii') Traceback (most recent call last): ... UnicodeEncodeError: 'ascii' codec can't encode character u'\ua000' in position 0: ordinal not in range(128) ''' Se vuelve a aplicar diciéndole que ignore los caracteres unicode superiores a los 8 bits (127) ''' >>> u.encode('ascii', 'ignore') 'abcd' ''' Se vuelve a aplicar diciéndole que reemplace esos carácteres por U+FFFD (REPLACEMENT CHARACTER) ''' >>> u.encode('ascii', 'replace') '?abcd?' ''' Se vuelve a aplicar reemplazándo esos caracteres por su equivalente html. ''' >>> u.encode('ascii', 'xmlcharrefreplace') '& #40960;abcd& #1972;'
Módulo de python para traducciones: Goslate
Google Translate tiene un API que permite usar el traductor desde un programa, en el caso de Python se tiene goslate.
Documentación oficial de Goslate
Para utilizarlo basta con instalarlo.
pip install goslate
Ejemplos de uso
1/ Detectar el lenguaje
import golsate gs = goslate.Goslate() language_id = gs.detect('hallo welt') language_desc = gs.get_languages()[language_id]
language_id = de
language_desc = German
2/ Traducir una palabra al español
import golsate gs = goslate.Goslate() word = gs.translate('hello','es')
word = hola
Nota: Otra opción en python puede ser utilizar Translate API Client Library for Python
Ejemplo de uso de SQlite3 con Python
SqLite es un paquete de software de dominio público que proporciona un sistema de gestión de base de datos relacional.
Documentación oficial de SQlite3 en python 3.5
Ejemplo sencillo de uso:
import sqlite3 .... con = sqlite3.connect('C:\\base_datos.db') cursor = con.cursor() print 'Conectado a la BD base_datos.db' .... self.cursor.execute('''CREATE TABLE IF NOT EXISTS COMMENT( id INT NOT NULL, comment TEXT NOT NULL, user TEXT )''') print 'Creada la tabla Comment' .... str2 = "INSERT INTO COMMENT (id, comment, user) " str2 = str2 + "VALUES (?, ?, ? )" self.cursor.execute(str2, (1, "comentario realizado", "pedro")) print 'Comentario insertado correctamente' .... self.cursor.execute("DROP TABLE IF EXISTS COMMENT") print 'Borrada la tabla Comment' ....
Nota: Al intentar conectar a la base de datos si no existe se creará con el nombre y la ruta que se especifique.
Categorias
- adobe (2)
- agile (1)
- Alfresco (1)
- Android (26)
- Angular (6)
- angularjs (10)
- apache (1)
- axis (2)
- Bases de datos (14)
- Bootstrap (1)
- C# (3)
- Cámara (1)
- chrome (3)
- Codeigniter (2)
- Control de Versiones (2)
- CSS (25)
- CVS (1)
- Django (9)
- Django Rest Framework (1)
- DNS (1)
- Docker (3)
- dominio (1)
- eclipse (5)
- Entity Framework (2)
- ETL (1)
- Firefox (6)
- flash (1)
- freecad (1)
- Git (12)
- GitHub (4)
- gpg (2)
- Groovy (1)
- Handlebars (1)
- hibernate (4)
- hosting (1)
- HTML (50)
- HTML 5 (26)
- Impresión 3D (9)
- Inkscape (1)
- IOS (2)
- ireports (3)
- Java (44)
- Javascript (55)
- JBoss (5)
- JPA (2)
- JQuery (20)
- Json (7)
- JSP (6)
- Keycloak (1)
- Lamp (1)
- LDAP (2)
- lean (1)
- linkedin (1)
- LINQ (1)
- linux (13)
- Livecycle (1)
- log (1)
- microcontroladores (1)
- MongoDB (4)
- MySQL (8)
- Node.js (5)
- OC4J (1)
- Openshift (2)
- Oracle (6)
- Patrones de Diseño (1)
- Photoshop (2)
- php (20)
- PostgreSQL (1)
- python (19)
- rabbitmq (1)
- Raspberry PI (13)
- Raspherry PI (5)
- React (6)
- seguridad (3)
- Selenium (3)
- Sencha Touch (1)
- Sin categoría (29)
- Spring (17)
- spring-boot (3)
- SQL (7)
- SQLServer (1)
- SSO (1)
- struts (2)
- SVN (1)
- Talend (1)
- Tomcat (6)
- unity (3)
- Visual Studio Code (2)
- vmware (5)
- Web Services (11)
- windows (18)
- wordpress (10)
- Xiaomi (1)
- xml (2)
Trabajos Realizados
- App Android – Autoka Fr
- App Android – Cartelera Cántabra
- App Android – Gramática y Vocabulario Ingles
- App Android – Hoja de Gastos
- App Android – Hotel Torre Cristina
- App Android – OcioEnjoy
- App Android – Visor CardBoard
- App Firefox – Managapp
- DiamanteBomba – DisasterCode
- Generador de Partes de Trabajo
- GitHub – Android Web Generator
- GitHub – Dynamic Angular Gallery
- GitHub – Dynamic React Gallery
- GitHub – Sotilizator
- GitHub – SpringAngularJS
- GitHub – Swiper Dynamic Angular Gallery
- HazParejas – DisasterCode
- RompeCabezas – DisasterCode
- Unity Game – English Couple
- Unity Game – Kill Wasp
- WordPress – El Buen Apicultor
- WordPress – El Cajón de los Retales
- WordPress – El Vestidito Azul
- WordPress – Feuchas
- WordPress – Fragua de Navajas Ponce
- WordPress – Humor a las Tres
- WordPress – Photo Places