Python: Métodos de cadenas I

Las cadenas de caracteres en Python son objetos de tipo str. Si declaramos una cadena y usamos la función type:

cadena = "Hola"
print(type(cadena))

El resultado que obtenemos es

<class 'str'>

Esto significa que cadena es un objeto de la clase str. Esta clase está predefinida en Python, y siempre que declaremos una cadena de caracteres se le asignará este tipo.

La clase str tiene predefinidos varios métodos que permiten hacer ciertas operaciones sobre las cadenas. Estos métodos pueden ser realmente útiles y nos ahorraran tiempo y código cuando tengamos que trabajar con cadenas en Python.

Vamos a ver algunos en detalle:

  • capitalize
  • center
  • count
  • encode
  • endswith
  • expandtabs
  • find
  • index

capitalize()

Este método convierte el primer carácter de la cadena a mayúscula y no altera la cadena original. Devuelve una copia de la cadena con el cambio aplicado.

cadena = "hola"
nueva = cadena.capitalize()
print(nueva)

En el ejemplo la cadena resultante sería Hola.

center(width)

El método center centra la cadena añadiendo los espacios necesarios (al principio y al final) hasta alcanzar el ancho indicado en el parámetro (width). Devuelve una cadena nueva con el cambio.

cadena = "hola"
nueva = cadena.center(10)
print(nueva)

El resultado del ejemplo será hola con tres espacios al principio y tres al final. Junto con los 4 caracteres de la cadena los caracteres totales son 10.

Anuncios:

Python Programming
Aprende Python 3 en un fin de semana
Aplicaciones gráficas con Python 3

count (sub[, start[, end]])

El método count de str cuenta el número de veces que aparece una subcadena (sub) dentro de la cadena principal (con la que se llama al método). El resultado devuelto es el número de apariciones de la subcadena.

cadena = "hola hola hola hola"
sub = "hola"
n = cadena.count(sub)
print(n)

El resultado será 4

Opcionalmente, se pueden pasar las posiciones inicial (incluida) y final (excluida) para acotar la búsqueda en la cadena. La posición final sólo se puede usar en conjunto con la inicial y siempre pasando la inicial primero y la final a continuación.

cadena = "hola hola hola hola"
sub = "hola"
n = cadena.count(sub, 2)
print(n)

En el ejemplo, el 2 es la posición inicial y no se indica posición final, por tanto se busca la subcadena (sub) desde el caracter l del primer hola de cadena (la primera posición en una cadena siempre es la 0), es decir, se buscará en este fragmento: la hola hola hola. El resultado será 3.

En el siguiente ejemplo se pasa también la posición final (8):

cadena = "hola hola hola hola"
sub = "hola"
n = cadena.count(sub, 2, 8)
print(n)

El resultado será 0 porque la posición final (8) es el carácter a del segundo hola de cadena. Recordad que la posición final es excluida, por tanto solo hará la búsqueda en este fragmento: la hol.

encode ([encoding[,errors]])

El método encode permite codificar cadenas en Python. Devuelve un objeto de bytes con la cadena codificada. Utiliza por defecto UTF-8.

cadena = "hola"
result = cadena.encode()
print(result)
print(type(result))

La salida generada por el ejemplo será:

b'hola'
<class 'bytes'>

Opcionalmente, se puede indicar una codificación diferente a UTF-8. Por ejemplo ascii.

cadena = "hola"
result = cadena.encode('ascii')

Dependiendo de la codificación que se utilice pueden producirse errores debido a que la cadena contenga caracteres que no se pueden codificar. Para gestionar este tipo de errores se puede indicar un método de error.

cadena = "hola compañeros"
result = cadena.encode('ascii')

El ejemplo anterior dará el siguiente error, puesto que el caracter ñ no es compatible con la codificación ascii:

UnicodeEncodeError: 'ascii' codec can't encode character '\xf1' in position 10: ordinal not in range(128)

La solución es usar un método de error:

cadena = "hola compañeros"
result = cadena.encode('ascii','replace')
print(result)

El método replace hace que se reemplacen todos los caracteres que no se pueden codificar por un carácter interrogación (?). La salida será esta:

b'hola compa?eros'

Existen otros métodos a parte de replace. Podéis probarlos y me decís qué ocurre 🙂:

  • backslashreplace
  • ignore
  • namereplace
  • strict
  • replace
  • xmlcharrefreplace

endswith (suf[, start[, end]])

El método endswith devuelve True cuando la cadena termina con el sufijo (suf) que se pasa como parámetro. Si no encuentra el sufijo al final de la cadena devuelve False.

cadena = "hola mundo"
result = cadena.endswith('do')
print (result)

El resultado del ejemplo será True.

Opcionalmente, se puede acotar la cadena indicando las posiciones inicial (start) y final (end). Como suele ocurrir en Python, la inicial es incluida y la final excluida.

cadena = "hola mundo"
result = cadena.endswith('la', 0, 4)
print(result)

Al indicar posición inicial (0) y posición final (4) la cadena sobre la que se hace la búsqueda del sufijo es hola. Como el sufijo que se busca es la, el resultado es True.

expandtabs([n])

El método expandtabs convierte las tabulaciones de una cadena a espacios (8 por defecto). No altera la cadena original. Devuelve una nueva cadena con el cambio aplicado.

cadena = "hola\tmundo"
result = cadena.expandtabs()
print(result)

\t es el tabulador. La cadena resultante tendrá 8 espacios en su lugar.

Si no queremos 8 espacios, podemos indicar otro número en el parámetro.

cadena = "hola\tmundo"
result = cadena.expandtabs(2)

En este ejemplo se remplaza por 2 espacios.

find (sub[, start[, end]])

El método find busca una subcadena (sub) dentro de la cadena original. Si la encuentra devuelve el índice de la primera ocurrencia. Si no la encuentra devuelve -1.

cadena = "hola hola"
n = cadena.find("hola")
print(n)

La cadena original se puede acotar indicando posiciones inicial (start) y final (end). La posición inicial incluida y la final excluida.

cadena = "hola hola"
n = cadena.find("hola",2)
print(n)

En el ejemplo se indica la posición inicial. La cadena quedaría acotada así: la hola. La búsqueda se hace en esa subcadena, pero la posición resultante será sobre la cadena completa. El resultado es 5.

index (sub[, start[, end]])

Este método es similar al anterior (find), pero en vez de devolver -1 cuando no encuentra la subcadena, lanza una excepción de tipo ValueError.

cadena = "hola"
n = cadena.index("mundo")

En el ejemplo se busca mundo. Como no está presente en la cadena hola devuelve un error:

ValueError: substring not found

Sígueme:

Deja una respuesta

Subir ↑