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()
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.
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 modulodatetime().
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
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
Fusionar dos diccionarios en Python 3.5, es algo que puede resultar común en nuestra aplicación.
El procedimiento varia según la versión de Python que usemos, en nuestro caso es la 3.5 , siguiendo las indicaciones de las convencionesPEP 448
Lo que obtenemos es un nuevo diccionario t , con todos los valores, donde están sobreescritos los valores del segundo diccionario (b), por los del primero (a)
Espero modestamente que este artículo, sirva de ayuda a alguien.
Gracias
“….El amor siempre empieza soñando y termina en insomnio“
En otros artículos he hablado de decoradores, en este, me referiré al uso de staticmethod en Python y sus características.
Todos sabemos que Python está orientado a objetos y que las clases son la base de su programación, por eso el uso de decoradores es una ayuda importante en el manejo de estas.
staticmethod es un decorador que nos permite usar una funcion dentro de una clase sin que esta reciba argumentos.
Su forma de escribirlo, es colocando una arroba delante
@staticmethod
Este decorador permite llamar a una clase, aunque esta aun no haya sido convertida en un objeto.
Veamos un ejemplo, que ya he empleado al hablar de decoradores antes:
class boxeador(object):
def __init__(self):
pass
@staticmethod
def esquina():
print("Has tenido suerte, tu esquina aun no tiene color")
def main():
b = boxeador()
b = b.esquina()
if __name__ == '__main__':
main()
Como ven hemos podido llamar a esquina() sin que esta tenga ningún parámetro.
Si eliminamos el decorador recibiríamos este error:
TypeError Traceback (most recent call last)
<ipython-input-22-0a10128b3e82> in <module>
12
13 if __name__ == '__main__':
---> 14 main()
<ipython-input-22-0a10128b3e82> in main()
8 def main():
9 b = boxeador()
---> 10 b = b.esquina()
11
12
TypeError: esquina() takes 0 positional arguments but 1 was given
'
Esto nos está indicando un error de tipo, que nos dice que a pesar de que la función esquina no tiene argumentos (parámetros), la hemos llamado como si lo tuviera.
Y hasta aquí, como siempre espero que sirva de ayuda a alguien.
Un saludo
Entrena duro y en silencio, que el éxito sea tu grito
Las vías que conozco, para cambiar el nombre a una columna son tres . Podemos hacerlo con el método rename(), el cual puede aplicarse directamente a la columna, o pasarlo a través de una funcion lambda.
Ojo, es posible que haya más posibilidades, me refiero a las que uso y conozco.
Cambiar el nombre a una columna con Pandas
El método rename(), se utiliza justo para modificar la etiqueta de los ejes, al aplicarlo nos devolverá un nuevo dataframe con los valores aplicados. Su sintaxis es:
maper: Ya sea un diccionario o una función , indica las transformación a aplicar al eje dado. Este parámetro y el eje se emplean para indicar que valores y ejes recibirán el cambio.
index: Nos permite establecer el eje. Si empleamos maper, index =0 , es lo mismo que maper = index
columns: Indica las columnas, si su valor es cero o se ignora, significa que es el mismo que maper.
axis: tiene por defecto el valor 0, que indica el índice, el valor 1 indica columnas. Pueden emplearse colocando el nombre del eje(índice, columnas), o el numero (0,1). El valor que recibe por defecto es el del índice.
copy: Su valor determinado es True, y esto garantiza copiar también los datos subyacentes.
inplace: valor por defecto False, si se convierte a True, al devolver el nuevo dataframe la copia anterior se ignora.
level: valor por defecto None, indica el numero o nombre del nivel. Si existen índices multiples solo modificara en el nivel indicado.
error: acepta raise o ignore, y ese último es su valor por defecto. Ignora el error del tipo keyerror, cuando index o columns contienen etiquetas que no existen.
Tenemos el siguiente dataframe:
Aplicándolo directamente seria algo asi:
Renombramos varias columnas usando mapping en las columnas Unnamed: 0 e Ischaemic heart disease, para ello pasamos los valores nuevos, en forma de diccionario.
En Python se dan dos tipos de errores principales. Los errores de sintaxis y las excepciones.
Los errores de sintaxis o interpretación, son muy comunes.
Su estructura suele ser la que aparece en el ejemplo siguiente:
>>> while True print('Hello world')
File "<stdin>", line 1
while True print('Hello world')
^
SyntaxError: invalid syntax
En este caso el intérprete de Python, reproduce la línea responsable del error y muestra una “flecha” que apunta al primer lugar donde se detectó este.
En el ejemplo, el error se detecta en la función print(), ya que faltan dos puntos (‘:’) antes del mismo.
El error ha sido provocado (o al menos detectado) en el elemento que precede a la flecha. Dentro de la declaración del error se muestran el nombre del archivo y el número de línea, lo cual te permitirá localizar con facilidad su ubicación exacta.
Excepciones
Se llama excepciones a errores detectados durante la ejecución del código que no son incondicionalmente fatales.
Esto quiere decir que pueden ser resueltos con una condición y por ello Python nos ofrece condiciones para manejarlos.
Cuando no son gestionadas por el código, resultan en en mensajes de error:
Veamos algunos ejemplos.
>>> 10 * (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 4 + spam*3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
Explicando un poco el ejemplo vemos que estrutura tiene.
En Python existen diferentes tipos de excepciones y el tipo a que corresponde se imprime como parte del mensaje.
La cadena mostrada como tipo de la excepción es el nombre de la excepción predefinida que ha ocurrido.
Esta convención es válida para todas las excepciones predefinidas del intérprete, y aunque no tiene por que ser así para excepciones definidas por el usuario, se recomienda su uso.
La parte anterior del mensaje de error muestra el contexto donde ocurrió la excepción, en forma de seguimiento de pila.
En general, contiene un seguimiento de pila que enumera las líneas de origen; sin embargo, no mostrará las líneas leídas desde la entrada estándar.
El resto del mensaje provee información basado en el tipo de la excepción y qué la causó.
La última línea de los mensajes de error indica qué ha sucedido.
Por último debemos saber que los nombres de las excepciones estándar son identificadores incorporados al intérprete (no son palabras clave reservadas).