sábado, 30 de junio de 2018

Receta Python 3 No. 5-3: Impresión con Seperador y Fin de Línea Diferentes en la Función print

1. Problema

Cambiar los carácteres de separación y fin de línea en la función print().

2. Solución

La función print() acepta como parámetros nombrados sep y end para especificar el carácter de separación y el carácter de fin de línea (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:

Python 2.7 3.7
Python,2.7,3.7

Python,2.7,3.7...

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 29 de junio de 2018

Receta Python 3 No. 5-2: Guardar Contenido en un Archivo

1. Problema

Se busca una solución alternativa de impresión del contenido de salida de la función print().

2. Solución

La función print() ofrece una versión sobrecargada que permite indicar el destino de la impresión; en este caso se usará un archivo de texto (Beazly, Jones, 2016).

3. Código Python 3

Archivo Python impresion-sobre-archivo.py [enlace alternativo]:

Prueba de ejecución:

Después de la ejecución de este código se generará un archivo de texto plano -fibonaccis.txtcon el siguiente contenido:


1
1
2
3
5
8
13
21
34
55

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 28 de junio de 2018

Receta Python 3 No. 5-1: Leer y Escribir Texto en un Archivo

1. Problema

Se requiere leer o escribir texto en un archivo, eventualmente codificado en ASCII, UTF-8, o UTF-16.

2. Solución

La función estándar open() ofrece la posibilidad de escribir y leer datos desde un archivo de texto. Entre las funcionalidades está la de hacer una lectura parcial o total del contenido del archivo fuente. En este caso el método clave es read().


En cuanto a la escritura, ésta se realiza por medio del método write() (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


1
2
3
4
5
6
7
8
9
10

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

miércoles, 27 de junio de 2018

Receta Python 3 No. 4-16: Remplazar un Ciclo while Infinito por un Iterador

1. Problema

Reemplazar la extructura de ciclo infinito while por un objeto iterador.

2. Solución

Este tipo de situación -el uso de ciclos o loops infinitos- normalmente se usa en casos donde la iteración no cumple un patrón patricular; dígase: menús, lectura o escritura de streams, y relacionados (Beazly, Jones, 2013).


Como alternativa, la función iter() permite controlar el final de un ciclo de este género por medio de un valor bandera o centinela. Resulta ser una forma compacta frente al clásico ciclo infinito while True.

3. Código Python 3





En este último caso el programador puede omitir el valor centinela o bandera que indica la terminación de la iteración, en este caso la expresión b''.

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

Receta Python 3 No. 4-15: Iterar en Orden sobre Dos Secuencias Ordenadas

1. Problema

A partir de dos colecciones previamente ordenadas, iterar sobre los elementos siguiendo el orden conjugado de ambas.

2. Solución

El módulo heapq ofrece el método merge() que permite unir y ordenar dos colecciones. A partir de esta fusión ordenada se puede iterar los elementos en orden (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución: 

1 2 3 4 6 7 9 10 13 17 18 

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

martes, 26 de junio de 2018

Receta Python 3 No. 4-14: Allanar Secuencias Anidadas

1. Problema

Allanar (flatten) una colección con secuencias anidadas.

2. Solución

Este proceso se puede lograr a través de una función generadora recursiva. En esta tarea se invoca la función recursiva usando la expresión yield from funcion_generadora() (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:

1
a
cat
2
3
dog
4
5

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

Receta Python 3 No. 4-13: Creación de Tuberías de Procesamientos de Datos

1. Problema

Crear una tubería (o en inglés, pipeline) para el procesamiento de datos.

2. Solución

Para procesar grandes volúmenes de datos de forma secuencial usando tuberías (o pipelines) se recurre a funciones generadores (Beazly, Jones, 2013).


Este tipo de técnica es tremendamente podereosa para otras situaciones como parseo, lectura en tiempo real de fuentes de datos, solicitud recurrente de datos por algún canal de comunicación, entre otras.

3. Código Python 3


Este programa se puede probar sobre el directorio www de un servidor Web (e.g., Apache). Al final de la ejecución se obtendrá la cantidad de bytes que ocupan un conjunto de líneas que cumplen determinado patrón.


Lo interesante de este programa es la operación secuencial de conjunto de archivos por medio de tuberías.

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 25 de junio de 2018

Receta Python 3 No. 4-12: Iterar sobre los Elementos de Diferentes Colecciones

1. Problema

Iterar sobre todos los elementos de diferentes colecciones.

2. Solución

La función chain() del módulo itertools permite solucionar este problema simplificando la sintaxis requerida por medio un único ciclo for (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python iterar-multiples-colecciones.py [enlace alternativo]:

Prueba de ejecución:


2
3
5
7
11
Mishkin
Fomma
Nesvanova
Rodión
Fiodor

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

domingo, 24 de junio de 2018

Receta Python 3 No. 4-11: Iterar por Múltiples Secuencias al Mismo Tiempo

1. Problema

Iterar por múltiples secuencias de forma simultánea.

2. Solución

La función incorporada zip() permite realizar esta operación de iteración por múltiples secuencias (Beazly, Jones, 2013).

3. Código Python 3

Prueba de ejecución:


Punto: (2, 4)
Punto: (3, 6)
Punto: (5, 8)
Punto: (7, 9)
Punto: (11, 10)

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 23 de junio de 2018

Receta Python 3 No. 4-10: Iterar sobre los Índices y Valores de una Secuencia

1. Problema

Iterar por cada uno de los índices y valores de una secuencia.

2. Solución

Con la función enumerate() se obtienen los índices y valores de una secuencia. Esta función es parte de la librería estándar de Python (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python indices-valores.py [enlace alternativo]:

Prueba de ejecución:


Índice: 0 - Valor: Raskolnikov
Índice: 1 - Valor: Michkin

Índice: 2 - Valor: Fomma

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

martes, 19 de junio de 2018

Receta Python 3 No. 4-9: Iterar a través de las Posibles Combinaciones y Permutaciones de un Conjunto de Elementos

1. Problema

Iterar a través de todas las posibles combinaciones y permutaciones generadas a partir de un conjunto de elementos.

2. Solución

El módulo itertools provee el método permutations() para la generación de permutaciones. En una permutación el orden sí importa, aunque se pueden repetir elementos por cada subconjunto pero en diferente orden.

Por su parte, las combinaciones se generan por medio del método combinations() (del mismo módulo). En una combinación el orden no importa, pero los elementos no se pueden repetir (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:

Permutaciones:
('Python', 'PyCharm', 'Programming')
('Python', 'Programming', 'PyCharm')
('PyCharm', 'Python', 'Programming')
('PyCharm', 'Programming', 'Python')
('Programming', 'Python', 'PyCharm')
('Programming', 'PyCharm', 'Python')

Combinaciones:
('Python', 'PyCharm')
('Python', 'Programming')
('PyCharm', 'Programming')

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 18 de junio de 2018

Receta Python 3 No. 4-8: Omitir los Primeros Elementos de un Objeto Iterable

1. Problema

Omitir o descartar los primeros elementos de un objeto iterable.

2. Solución

A través del método drowhile() del módulo itertools es posible descartar los primeros elementos que cumplan con un predicado (Beazly, Jones, 2013).

3. Código Python 3


Archivo de texto contenido.txt [enlace alternativo].


Prueba de ejecución:

Python
Programming
Software
Innovation
Source code

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 15 de junio de 2018

Receta Python 3 No. 4-7: Usar una Sección de un Objeto Iterador

1. Problema

Usar una sección (slice) de un objeto iterador o función generadora.

2. Solución

El módulo itertools provee la función islice(); esta función facilita obtener una sección de un elemento iterador o generador.


En su defecto, un iterador o generador no cuenta con un mecanismo para la definición de una sección, pero a través de la función islice() es posible establecer índices para una sección particular. (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


10
11
12
13
14
15
16
17
18
19

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

Receta Python 3 No. 4-6: Definir una Función Generadora con Estado Extra

1. Problema

Definir una función generadora que contenga un dato extra de interés.

2. Solución

Para lograr esta tarea se tiene que implementar el método __iter__(). Esto va a permitir exponer datos adicionales (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


1:Python
2:Programming

3:Software

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 14 de junio de 2018

Receta Python 3 No. 4-5: Iteración en Sentido Inverso

1. Problema

Iterar una colección o secuencia en sentido inverso.

2. Solución

La función integrada reverse() permite recorrer o iterar una secuencia o colección en sentido contrario o inverso (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


11
7
5
3
2

n
o
h
t
y
P

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

miércoles, 13 de junio de 2018

Receta Python 3 No. 4-4: Implementar el Protocolo de Iterador

1. Problema

A partir de un objeto que integre iteración, implementar el protocolo de iteración.

2. Solución

El protocolo de iteración en este caso consistirá en realizar un recorrido basado en el patrón de profundidad-primero (Beazly, Jones, 2013).


En este patrón se toma un hijo, y a partir de él se realiza la iteración sobre sus descendientes; esto ocurre de forma recurrente.

3. Código Python 3


Prueba de ejecución:


Nodo(0)
Nodo(1)
Nodo(3)
Nodo(4)
Nodo(2)
Nodo(5)

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

martes, 12 de junio de 2018

Receta Python 3 No. 4-3: Crear un Nuevo Patrón de Iteración a Partir de Generadores

1. Problema

Implementar un patrón de iteración personalizado como alternativa a los ya existentes (e.g., range(), reversed()).

2. Solución

En Python se cuenta con las funciones generadores. Funciones que pueden ser personalizadas para la creación de un patrón de iteración personalizado. En este tipo de función se recurre al elemento de programa yield (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
[0, 0.3, 0.6, 0.8999999999999999]

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 11 de junio de 2018

Receta Python 3 No. 4-2: Delegar el Proceso de Iteración

1. Problema

Se cuenta con un objeto contenedor de un objeto iterable (e.g., una lista, una tupla). Se debe delegar la iteración a este objeto contenedor.

2. Solución

Para solucionar este caso se debe definir el método __iter__() para que el contenedor lleve a cabo el proceso de iteración.

3. Código Python 3


Prueba de ejecución:


Nodo(1)

Nodo(2)

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

domingo, 10 de junio de 2018

Receta Python 3 No. 4-1: Consumir Manualmente un Iterador

1. Problema

Consumir manualmente un iterador. Esta tarea no debe involucrar el uso de un ciclo for.

2. Solución

Para consumir un elemento iterable (recorrible), Python cuenta con la función next(). Esta función debe estar dentro de un bloque try-except para capturar la excepción StopIteration (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python recorrido-manual.py [enlace alternativo]:

Prueba de ejecución:


Python
Programming
Software
Innovation
Source code

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 9 de junio de 2018

Receta Python 3 No. 3-16: Manipular Fechas con Zonas Horarias

1. Problema

Manipular fechas que involucran zonas horarias.

2. Solución

El módulo pytz cuenta con la base de datos Olson; ésta provee información de facto sobre zonas horarias para diferentes idiomas y sistemas operativos (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python fechas-zonas-horarias.py [enlace alternativo]:

Prueba de ejecución:


Fecha base: 2013-03-14 17:23:29
Fecha Bogotá: 2013-03-14 17:23:29-05:00
Fecha Singapur: 2013-03-15 06:23:29+08:00

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 8 de junio de 2018

Receta Python 3 No. 3-15: Convertir una Cadena de Caracteres en Fechas y Horas

1. Problema

Convertir una cadena de caracteres en la representación de una fecha y hora.

2. Solución

El módulo datetime facilita la solución de este problema por medio de varias construcciones -i.e., métodos- utilitarios (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python conversion-cadena-fecha.py [enlace alternativo]:

Prueba de ejecución:

2013-04-13 00:00:00
1882 days, 6:41:01.908285

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 7 de junio de 2018

Receta Python 3 No. 3-14: Encontrar un Rango de Fecha para un Mes Particular

1. Problema

Encontrar un rango de fecha para un mes específico.

2. Solución

Por medio del objeto datetime.timedelta se calcula el incremento de fecha de acuerdo a un paso dado (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


2018-06-01
2018-06-02
2018-06-03
2018-06-04
2018-06-05
2018-06-06
2018-06-07
2018-06-08
2018-06-09
2018-06-10
2018-06-11
2018-06-12
2018-06-13
2018-06-14
2018-06-15
2018-06-16
2018-06-17
2018-06-18
2018-06-19
2018-06-20
2018-06-21
2018-06-22
2018-06-23
2018-06-24
2018-06-25
2018-06-26
2018-06-27
2018-06-28
2018-06-29
2018-06-30

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

miércoles, 6 de junio de 2018

Receta Python 3 No. 3-13: Determinar la Fecha del Último Día

1. Problema

Encontrar la fecha de la última ocurrencia de una día de la semana previo a la fecha actual.

2. Solución

El módulo incorporado datetime cuenta con métodos utilitarios que ayudan a la resolución de este caso (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


2018-06-06 07:25:29.804835
2018-06-03 07:25:29.804835
2018-05-30 07:25:29.804835
2018-06-01 07:25:29.804835

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

martes, 5 de junio de 2018

Receta Python 3 No. 3-12: Convertir Días en Segundos

1. Problema

Convertir días en segundos. De forma análoga, realizar conversiones comunes de tiempo.

2. Solución

El módulo datetime de Python permite realizar conversiones de tiempo. Otras operaciones interesantes son las de aritmética: diferencia y suma entre dos instancias de tiempo (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


5
37800
10.5
130.5

2018-06-19 00:00:00
1879

2018-06-05 07:19:08.949999

2018-06-05 07:32:08.949999

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 4 de junio de 2018

Receta Python 3 No. 3-11: Seleccionar Elementos de una Colección de Forma Aleatoria

1. Problema

Seleccionar elementos de una colección usando aleatoriedad.

2. Solución

La función choice() del módulo random permite escoger un elemento entre varias opciones. Las opciones estarán almacenadas, por ejemplo, en una lista.


La función shuffle() aleatoriza la posición de los elementos de una lista. Se comparta como una baraja de cartas: las cartas quedan repatidas sin seguir ningún patrón.



Alternativamente, para la sección de varios elementos como muestra se usal a función random.sample(coleccion, cantidad_muestra) (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


2
7
3
11
2

[3, 11, 7, 5, 2]

[3, 7, 2]
[11, 7, 2]
[3, 11]
[2, 5]

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O