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.