Ejecutar comandos Shell en Python con os.system

logo python

Si en alguna ocasión, ante alguna necesidad de programación, has necesitado ejecutar comandos Shell en Python con os.system, tienes una opción interesante que te mostraré si sigues leyendo.

Python nos permite ejecutar un comando de shell que se almacena en una cadena usando os.system()

import os
#muestra el mensaje en la consola
os.system("echo mostrar mensaje en la consola")
output
mostrar mensaje en la consola

Al igual que os.system() en el ejemplo anterior, donde imprimimos con echo el mensaje en consola, podemos no usar echo y obtener una salida estándar (stdout) que no se muestra en consola.

Cuando damos una orden con os.system, el resultado positivo será igual a 0, o diferente de 0, en caso de que no se cumpla.

En este ejemplo, intentamos mover el directorio actual a un directorio que no existe, por tanto recibimos un error diferente de 0.

directorio_erroneo = os.system("cd directoriofalso")
print("cd directoriofalso da un codigo de error %d" % directorio_erroneo)
Output
sh: line 0: cd: directoriofalso: No such file or directory
cd directoriofalso da un codigo de error 256

Podemos emplear otros métodos más potentes para escribir comandos Shell en Python como subprocess().

Y hasta aquí, espero ayudar a alguien con este post.

Hacer preguntas es prueba de qué se piensa.

R. Tagore

Contar las apariciones de un carácter en una cadena de Python.

logo python

En muchas ocasiones nos hemos o veremos necesitados de contar las  apariciones de un carácter en una cadena de Python, para lo cual tenemos diferente opciones.

En dependencia de nuestra necesidad, o el módulo con el que nos encontremos trabajando, podremos hacerlo por una vía u otra

for

Podemos recorrer la cadena, crear un contador e incrementarlo en uno cada vez que encuentre en carácter que buscamos.

cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
    
contador = 0 
for i in cadena:
    if i == "a":
        contador = contador + 1
print(contador)
salida
8

count

La función count(), devuelve de un modo sencillo, cúantos caracteres  iguales al que e le pasa como parámetro, existen en la cadena.

Sintaxis

array.count('x')

Aquí, dos modos de implementarla:

a = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'.count('n')
print(a)
print('Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'.count('a'))
salida
6
8

Una función lambda

Una lambda en Python, es la mínima función que se puede expresar dentro de una expresión.

Por tanto para contar caracteres con una función lambda, podemos plantearlo con la función map() que aplicará sobre cada integrante de la lista una acción que en nuestro caso será dar valor 1 y luego lo sumaremos con la función sum().

cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
# utilizamos las funciones map y sum, un bucle if  - else la funcion map y sum, 
# lammbda parametro . accion, donde se ejecuta
print(sum(map(lambda x : 1 if 'a' in x else 0, cadena)))
salida
8

defaultdict

defaultdict(), pertenece al modulo collections. Permite contar los elementos dados dentro de una cadena y devuelve un valor 0 si el carácter no existe.

from collections import defaultdict
cita = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
chars = defaultdict(int) #creamos el objeto con el parámetro int

for char in cita:  #empleamos un for para recorrer la cadena 
    chars[char] += 1
    
print(chars['a'])
print(chars['e'])
print(chars['i'])
print(chars['o'])
print(chars['u'])
print(chars['l'])
print(chars['m'])
print(chars['n'])
print(chars['u'])
print(chars['z']) #caracter que no existe
print(chars['h']) #caracter que no existe
print(chars['v'])

salida
8
13
3
4
3
2
2
6
3
0
0
1

collections.counter

counter() es una subclase de dictado para contar objetos hash, o sea datos estructurados de forma que asocian llaves o claves con valores.

En esta colección, los elementos se almacenan como claves de diccionario y sus recuentos se almacenan como valores de diccionario. El conteo puede arrojar cualquier cualquier valor entero, incluido el cero, o valores negativos. Counter devuelve cero para elementos inexistentes.

cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
from collections import Counter
cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
counter = Counter(cadena)
print(counter['a'])
print(counter['x'])
salida
8
0

Otros artículos sobre Python

pandas.df.value_count

La librería Pandas por supuesto, también ofrece  una funcion simple para contar caracteres en una cadena.

Debemos primero convertir la cadena a un dataframe o serie  pandas y luego aplicarle  la función value.count(), como se ve en el ejemplo:

import pandas as pd
cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
print(pd.Series(list(cadena)).value_counts())
salida
14
e    13
a     8
n     6
s     5
d     5
o     4
r     4
u     3
c     3
i     3
l     2
m     2
p     2
t     2
,     1
v     1
ñ     1
Q     1
g     1
b     1
.     1
dtype: int64

re  y findall trabajando con expresiones regulares

El modulo re y la función findall(), nos permiten trabajar con expresiones regulares. Digamos que una expresión regular, es una sintaxis dada que está contenida en un patrón. Si hacemos coincidir es patrón con nuestro parámetro de búsqueda, obtendremos los elementos que se repiten.

import re
cadena = 'Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino.'
print(len(re.findall("a", cadena))) 

Y hasta aquí, espero sinceramente que esto sirva de ayuda a alguien.

Por mucho tiempo que este un tronco en el agua, nunca llegará a ser cocodrilo.

D.

Assertion Error en Python

python error

El manual indica que Assertion Error en Python se lanza cuando la declaración assert falla. Acá te explico porque.

El lenguaje incluye esta declaración assert (afirmación) incorporada que le permite crear salidas de mensajes de depuración simples basadas en afirmaciones lógicas simples.

Cuando una declaración afirmativa (assertion) de este tipo falla (es decir, devuelve un valor False), se genera un AssertionError.

El Assertion Error, se basa en el concepto de que al escribir un código, se  declara que una condición es verdadera mediante una declaración de afirmación antes de ejecutar el módulo.

Si la condición es Verdadera, el control simplemente se mueve a la siguiente línea de código.

En caso de que sea False, el programa deja de ejecutarse y devuelve AssertionError Exception. 

Un error común es una condición en la cual se retorna un None, lo cual es visto como un fallo por el interprete.

Así que si tienes este error debes comenzar a revisar por ahí.

En otro artículo te diré como capturar esta excepción y manejarla.

El amor construye, con las mismas razones que el odio destruye. Emplean la misma energía, copan al cerebro con la misma fuerza, arrastran pasiones con el mismo fervor; no es raro entonces que pasemos de uno a otro con tanta impunidad social.

Y

Copiar un fichero en Python con shutil

logo python

Veamos hoy como copiar un fichero en Python con shutil, que es un modulo que Python ofrece para este tipo de acciones

Tenemos varias opciones, a continuación, te las muestro:

copy

Este es un modulo de Python, que pertenece a shutil().

copy() copia el contenido del fichero y sus permisos, pero sin embargo, no copia los metadatos del fichero.

copy() acepta como parámetros, los siguientes:

  • src: Ruta completa del fichero origen, en formato cadenav(string), o un objeto(PathLike)
  • dst: Ruta del fichero  de destino. En este caso  hay que considerar que si la ruta es un directorio, se copiará el fichero origen en el directorio y tomará como nombre el del fichero original.
  • follow_symlinks (default =True): Cuando follow_symlinks es falso y src es un enlace simbólico, dst se creará como un enlace simbólico. Si follow_symlinks es verdadero y src es un enlace simbólico, dst será una copia del archivo al que se refiere src.
import shutil
shutil.copy('origen.txt', 'destino.txt')
shutil.copy('/ruta/origen.txt', '/ruta/destino/copia.txt')
shutil.copy('/ruta/origen.txt', '/ruta/destino')

Otros artículos sobre Python

copy2

La función copy2(), permite copiar los metadatos del archivo y funciona exactamente igual que copy().

import shutil
shutil.copy2('origen.txt', 'destino.txt')
shutil.copy2('/ruta/origen.txt', '/ruta/destino/copia.txt')
shutil.copy2('/ruta/origen.txt', '/ruta/destino')

Copyfile

copyfile() permite  copiar  solo el contenido de un fichero.

Su sintaxis es:

copyfile(src, dst, follow_symlinks=True). 

Esta función hace una copia del fichero original src() en el fichero destino dst(). Tanto src(), como dst(), son cadenas de texto que ofrecen rutas.

Considera, que si el fichero destino ya existe, este será reemplazado.

La función lanzara un OSError, si no se puede  escribir en el destino.

import shutil
shutil.copyfile('origen.txt', 'destino.txt')
shutil.copyfile('/ruta/origen.txt', '/ruta/destino/copia.txt')

Copyfileobj

Esta función funciona como  copyfile(), con la diferencia  de que src() y dst() deben ser objetos de tipo fichero (no  un string con las rutas).

import shutil
file_src = 'source.txt' 
f_src = open(file_src, 'rb')
file_dest = 'destination.txt' 
f_dest = open(file_dest, 'wb')
shutil.copyfileobj(f_src, f_dest)

Y hasta aquí, esto es todo.

Espero que sirva de ayuda a alguien

Para ser parte del 1%, hay que hacer lo que el 99% no hace.

D.

Cambiar el tamaño de la imagen en Python con opencv

logo python

En este pequeño post enseñaré como cambiar el tamaño de una imagen en Python con opencv. Python es un lenguaje que resulta útil, para llevar a cabo muchas tareas necesarias, incluido el tratamiento de imágenes, que pueden exigir diferentes niveles de complejidad.

Consideremos primero que una  imagen es un array, que puede ser tratado como un objeto numpy.

El método resize() de Python no es efectivo en este caso, ya que no tiene en cuenta el eje, y debido a esto no es capaz de extrapolar y/o interpolar.

El módulo opencv se usa en Python para  la visión por computadora  y el procesamiento de imágenes.

El procedimiento en esencia es leer primero la imagen empleando la función imread(), y luego cambiar su dimensión empleando función resize().

La sintaxis seria así:

dst = cv2.resize(src, dsize[, fx[, fy[, interpolation]]]])

Donde fx y fy son factores de escala a lo largo de los ejes x e y, dsize() se refiere al tamaño de la imagen de salida y el indicador de interpolación se refiere al método que vamos a usar.

Ya sea que se especifique (fx, fy) o dsize, OpenCV calcula el otro automáticamente.

Lo primero es disponer de opencv en el ordenador, para ello deberás descargarla y tenerla ya instalada. Puedes seguir las instrucciones acá .

import cv2
import numpy as np
img = cv2.imread('archivo.jpeg')
res = cv2.resize(img, dsize=(54,140),interpolation=cv2.INTER_CUBIC)

Podemos emplear como interpolación las siguientes:

Nearest Neighbor:

near_img = cv2.resize(img,None, fx = 10, fy = 10, interpolation = cv2.INTER_NEAREST)

la bilineal,

bilinear_img = cv2.resize(img,None, fx = 10, fy = 10, interpolation = cv2.INTER_LINEAR)

o la bicúbica que teníamos en el ejemplo inicial

bicubic_img = cv2.resize(img,None, fx = 10, fy = 10, interpolation = cv2.INTER_CUBIC)

Todas emplean algoritmos diferentes, y su efectividad varía de un caso a otro.

Y hasta aquí, esto es todo.

Espero que esto sirva de ayuda a alguien.

La ignorancia, es la muerte de los vivos

FloatingPointError en Python

python error

El  FloatingPointError en Python, indica que algo salió mal, al efectuar  un cálculo de punto flotante.

Las causas del error por tanto pueden ser varias, y su manejo dependerá de tus objetivos.

Si necesitamos evitarlo, el empleo de decimal(), puede ayudarnos,  ya que  contienen varias funciones integradas para operaciones matemáticas simples (por ejemplo, sqrt); sin embargo es posible que los resultados de estas funciones no siempre coincidan con la función correspondiente en matemáticas u otros módulos con mayor precisión.

Justo por esto es más recomendable emplear math(), por su mayor exactitud.

Lo importante que debes saber, es que la causa de este  error  muchas veces está, en las características de los números con base N.

Como declarar un array en Python

logo python

En Python trabajamos constantemente con matrices de diferentes dimensiones. En este articulo vamos a ver como declarar un array en Python, usando dos formas.

Lo primero a considerar, es que en Python el primer elemento de una matriz, ocupa la posición 0, el segundo la posición 1 y así sucesivamente.

Declaración simple:

La forma mas sencilla de declarar que una variable recibe como datos un array es escribiendo el nombre de la variable el signo igual y corchetes:

mi_array = []

Esto indica al interprete de Python que mi_array es un array que de  momento esta vacío.

En este caso estamos accediendo al modulo list()

Se puede acceder a los elementos de la lista simplemente pasando el índice requerido. Dicho entonces, se entiende que mi lista[2] accederá al tercer elemento.

Para añadir un elemento usamos el módulo append() con el elemento que se agregará, teniendo en cuenta que append() lo colocará al final.

Si deseamos colocarlo en una posición especifica, se usa la función insert(x, y)  donde el índice es  x, e  y el valor y.

Si el índice tiene un valor negativo es porque estamos accediendo a las posiciones contando de atrás hacia adelante, o sea en orden inverso.  

mi_matriz = [1,2,3,"s",5]
print(mi_matriz [-2])
mi_matriz.insert(4,6)
print(mi_matriz [-2])
mi_matriz.append('f')
print(mi_matriz)
 output
s
12
[1, 3, 5, 7, 9, 's', 12, 'f', 'g']

La clase array

El modulo array permite inicializar un array que incluirá  solo elementos homogéneos.

Para usarlo debe importarlo como cualquier otro modulo, y viene de la librería array.

Este se define con paréntesis y acepta dos argumentos,  el type code que define el tipo de los elementos que lo integran; el segundo parámetro es la lista de estos elementos entre corchetes.

Para acceder a un elemento del array, se emplea la función index(x) donde x es el índice del array.

Para insertar un nuevo elemento en el array, se llama a la función insert(i,x), donde es el índice y x es el valor a insertar.

Escribir en un fichero en Python

logo python

La tarea de escribir en un fichero en Python es algo común, que forma parte de los primeros pasos, en este lenguaje.

Veamos como hacerlo.

Partamos de considerar que un fichero es un objeto de la clase File, que, sirven para guardar datos en disco que podrán ser leídos posteriormente, ver cómo leer ficheros línea a línea en Python.

Los ficheros con los que trabajaremos en Python regularmente pertenecen o bien al tipo texto o al tipo binario.

Los primeros son aquellos con caracteres legibles para el ser humano, y generalmente codificados para hacer mas fácil su comprensión.

Los segundos, son archivos compuestos por un flujo de bytes  diseñados para ser leídos o utilizados por  programas o aplicaciones especificas.

Para escribir un fichero en Python, debemos abrirlo con open() , al igual que si vamos a leerlo.

Llamar a open automáticamente crea automaticamente un objeto de la clase File.

open(), recibe dos parámetros o argumentos, la ruta donde se encuentra el fichero(path), y el modo en que abrirmos el fichero(lectura,escritura,etc).

Su sintaxis entonces es:

open(path, modo)

Por defecto el modo en que se abre es el modo texto, si necesitamos que Python lo abra en modo binario, deberemos pasarle al modo el argumento b.

Los modos en los que se puede abrir un fichero de tipo texto son:

rSolo lectura y es el modo por defecto si no se indica lo contrario
wSolo escritura, si ya existe el fichero, sobreescribe su contenido.
aAdición. En el fichero solo se puede escribir, por tanto si existe el fichero, aquello que se escriba se añadirá al final del mismo.
xSolo escritura, pero lanzará una excepción si ya  existe el fichero.
r+Lectura y escritura.

Su variante para ficheros del tipo binario es :  rb, wb, ab, xb, rb+.

Entonces para a estructura para abrir un fichero en modo escritura solo necesitamos hacer esto:

Miarchivo = open('miruta/mi_fichero' ,  'w' )
#o esto:
Miarchivo= open('miruta/mi_fichero' ,  'w' )
try:
# acciones para escribir en el fichero
finally:
Miarchivo.close()

O  empleando with, que no brinda lo mismo que el bloque  try – finally, pero en un una sola sentencia with - as.

with open('miruta/mi_fichero' ,  'w' )as f:
# acciones para escribir en el fichero

Una vez abierto el fichero en formato escritura, toca escribirlo, lo cual haremos con write().

Miarchivo = open('miruta/mi_fichero' ,  'w' )
Miarchivo.write('Bienvenidos \n'')
#o esto:
Miarchivo= open('miruta/mi_fichero' ,  'w' )
try:
Miarchivo.write('Bienvenidos \n')
finally:
Miarchivo.close()

#con with
with open('miruta/mi_fichero' ,  'w' )as f:
Miarchivo.write('Bienvenidos \n')

Para escribir un fichero binario añadimos el carácter b:

with open('miruta/mi_fichero' ,  'w' )as f:
Miarchivo.write(b'0x34')

Y esto es todo.

Espero sinceramente poder ayudar a alguien.

El miedo puede hacer que un burro ataque a un león

Obtener la hora y la fecha en Python

logo python

Algo tan sencillo, como obtener la hora y la fecha en Python, es algo que debemos saber, al comenzar con este lenguaje. Aquí muestro como hacerlo.

Para obtener la hora actual en Python tenemos dos módulos incorporados al lenguaje . Estos son time y  datetime.

Time

import time
# time.strftime para obtener la hora actual en Python
a = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print(a)
b =time.ctime

ctime() es útil para para obtener el día de la semana, el mes, el día, la hora y el año.

time.localtime()  nos devuelve la hora local de la zona horaria en la que estamos, mientras que time.gmtime() nos devuelve la  hora UTC.

 Datetime 

from datetime import datetime
fechaTotal = datetime.now()
print(fechaTotal)
añoYhora = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(añoYhora)
hora = datetime.now().time()
print(hora)

En el código anterior estamos obteniendo un  objeto a de tipo datetime() que incluye toda la información de la fecha, incluyendo el año, el mes, el día y la hora.

Podemos transformarlo a formato string, usando  método strftime().

Para obtener solo la hora podemos emplear datetime.time().

Y hasta aquí.

Espero modestamente, haber ayudado a alguien.

Para ser parte del 1%, hay que hacer lo que el 99%  no hace.

Listar ficheros de un directorio en Python con iterdir()

logo python

En otras ocasiones he hablado sobre otros métodos para listar ficheros, veamos hoy como listar ficheros de un directorio en Python, con iterdir().

Iterdir() es una función iteradora de Python que recorre el contenido de el directorio especificado, en la ruta que le asigne.

Pertenece al módulo pathlib,  a diferencia de scandir cuya función es parecida, pero que es pertenece al modulo os.

Pathlib como os crea objetos diseñador para manejar ficheros y directorios de forma eficiente.

Al listar un directorio, se crea  un objeto Path. Los objetos de clase Path poseen también la propiedad name, y los métodos is_file()  e  is_dir(), que permiten comprobar si una entrada es  un archivo o un directorio.

import pathlib
dir = "/Users/blackmaster/Downloads/"
directorio = pathlib.Path(dir)
for fichero in directorio.iterdir():
    #print(fichero.name)
    if fichero.is_file:
        print('\n archivo:' +fichero.name)
    if fichero.is_dir:
        print('\n Carpeta:' + fichero.name )

Y hasta aquí.

Espero que este articulo sirva de ayuda a alguien.

El que siempre soñó, tiene derecho a ganar

Translate »