Uso de property en Python

logo python

Este post estará dedicado a otro decorador. Veremos el uso de property en Python, que bastante común para los desarrolladores.

Property nos permite trabajar con funciones como si fueran variables, y esta su magia dotándonos de una ventaja adicional al programar.

Como todo decorador, se escribe con la @ delante, o sea asi:

@property

Los decoradores classmethod y staticmethod

Veamos su uso en este ejemplo:

class boxeador(object):
    def __init__(self, color):
        self.color = color
    
    @property
    def esquina(self):
        print("Bienvenido, tu color es {}".format(self.color))
    
def main():
    a = boxeador('rojo')
    e = a.esquina
    
if __name__ == '__main__':
    main()

Output:

Bienvenido, tu color es rojo

Si eliminamos el decorador, no obtendríamos nada.

Y hasta aquí.

Espero que esto haya servido de ayuda a alguien.

Muchas gracias

Los hijos van al psicólogo a  pagar, para que le digan las mismas cosas que los padres llevan diciéndole años, gratis

Y

Listar un directorio en Python con walk() de forma recursiva.

logo python

En este articulo mostraré como listar un directorio en python con walk. En este link podrás ver también, como acceder a directorios con scandir

El método walk() pertenece al módulo os , y recibe como parámetro la ruta del contenido que recorreremos.

Como lo que hace el método es crear un iterador, que en cada iteración, devuelve tres valores: el nombre de la ruta completa del directorio, la lista de directorios que lo componen y la lista de ficheros de ese directorio.

El recorrido que hace el metodo por defecto es descendente, por lo que primero listará el contenido del directorio actual, y luego  ira descendiendo por nivel listando los directorios correspondientes.

 Cuando no se especifica la ruta,  walk() toma como referencia el directorio actual.

import os
dir = "/Users/blackmaster/Downloads/"

for nombre_directorio,carpetas,archivos in os.walk(dir):
    print('\n A')
    print(nombre_directorio)
    print('\n B')
    print(carpetas)
    print('\n C')
    print(archivos)

El resultado del script anterior irá devolviendo recursivamente, o sea por niveles los componentes de una ruta en este caso, separados por un salto de línea con los subtitulos A, B y C.

Te invito a que lo pruebes, para que lo comprendas mejor.

Si al método walk() le pasamos el argumento topdown=False:, mostrará  primero el contenido de los directorios más profundos.

Como por defecto, walk() no sigue los enlaces simbólicos que encuentra en un directorio, hay que pasar el argumento followlinks=True, para que lo haga.

import os
dir = "/Users/blackmaster/Downloads/"

for nombre_directorio,carpetas,archivos in os.walk(dir, topdown=False,followlinks=True):
    print('\n A')
    print(nombre_directorio)
    print('\n B')
    print(carpetas)
    print('\n C')
    print(archivos)

Y hasta aquí.

Espero modestamente, que este post ayude a alguien.

La clave para todo es la determinación

D.

AttributeError en Python

python error

El AttributeError, es un error común que aparece en Python por algunas razones que veremos a continuación.

La más común de ellas, es que obtengas este error, debido a qué has empleado una sangría errónea, como por ejemplo mezclar tabulaciones y espacios.

La otra causa que conozco, en Python 3+, es que esto ocurra si usas variables privadas que comienzan con doble subrayado.

Puedes leer sobre otros errores de Python en mi blog.

El aire hincha la vela, pero la deshilacha, y hay tantas velas rotas en el fondo del mar.

J.A. Buesa

AttributeError: ‘AxesSubplot’ object has no attribute ‘set_axis_labels’

seaborn error

Si estas recibiendo el error ‘AxesSubplot’ object has no attribute ‘set_axis_labels’; te daré una explicación de a que se debe.

Seaborn, no devuelve una figura que es lo que esperas obtener, sino un objeto  de ejes(axis-object)

La solución es importar matplotlib que será la encargada de dibujar el gráfico en el lugar indicado.

Puedes verlo en el ejemplo, que sigue.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

trim= pd.DataFrame({'mes': ['ene', 'feb', 'mar'], 'val': [100, 200, 300]})
barplot(x = 'mes', y = 'val', 
trim = meses,
color = 'blue')
ax.set(xlabel='common xlabel', ylabel='common ylabel')
plt.show()

Puedes contactar conmigo acá:

Por que la vida es eso sembrar, sembrar, sembrar

J. A. Buesa

Comparar fechas con Python

logo python

Una necesidad que puede surgir al programar, es tener que comparar fechas en Python.
Implementar las comparaciones no es algo complejo y para ello emplearemos operadores de comparación de uso común como <, >, <=, >=, !=  y otros, dentro del modulo datetime().

import datetime
  
# fecha in yyyy/mm/dd format
fecha_1 = datetime.datetime(2020, 4, 6)
fecha_2 = datetime.datetime(2019, 12, 30)
fecha_3 = datetime.datetime(2019, 1, 1) 

# la comparacion devolvera verdadero o falso

print("La fecha_1 es mas nueva que la fecha_3 : ", fecha_1 > fecha_3)
print("La fecha_2 es mas vieja que la fecha_3 : ", fecha_2 < fecha_3)
print("La fecha_3 es igual a la fecha_1 : ", fecha_3 == fecha_1)
print("La fecha_1 no es la misma que la fecha_2 : ", fecha_1 != fecha_2)

La salida que obtenemos es :
La fecha_1 es mas nueva que la fecha_3 :  True
La fecha_2 es mas vieja que la fecha_3 :  False
La fecha_3 es igual a la fecha_1 :  False
La fecha_1 no es la misma que la fecha_2 :  True

Sumar y restar días en Python

En este otro ejemplo comparamos varias fechas que entramos por teclado.​

# Entramos por teclado las fechas

dia_1, mes_1, año_1 = [int(x) for x in input("Introduzca fecha del primer envio"
        "(YYYY/MM/DD) : ").split('/')]
  
primera = date(dia_1, mes_1, año_1)
  

dia_2, mes_2, año_2 = [int(x) for x in input("Introduzca fecha del segundo envio"
        "(YYYY/MM/DD) : ").split('/')]
  
segunda = date(dia_2, mes_2, año_2)

dia_3, mes_3, año_3 = [int(x) for x in input("Introduzca fecha del tercer envio"
        "(YYYY/MM/DD) : ").split('/')]
  
tercera = date(dia_3, mes_3, año_3)
  
# Check the dates
if primera == segunda:
    print("Es raro que ambas se hicieran en mismo dia")
      
elif tercera > primera:
    print("es correcto")
      
else:
    print("Debe analizarse")

Y esto es todo, espero sinceramente que este post, sirva a alguien.

No discutas nunca con un imbécil, te llevará a su terreno y allí te ganará por experiencia

D.