30 métodos de las cadenas



El tipo de dato str es una clase incorporada cuyas instancias incluyen variados métodos ─más de treinta─ para analizar, transformar, separar y unir el contenido de las cadenas de caracteres. En este pequeño artículo detallamos los que consideramos más relevantes para tener siempre a mano.

Métodos de análisis

El método count() retorna el número de veces que se repite un conjunto de caracteres especificado.

>>> s = "Hola mundo"
>>> s.count("Hola")
1

Los métodos find() e index() retornan la ubicación (comenzando desde el cero) en la que se encuentra el argumento indicado.

>>> s.find("mundo")
5
>>> s.index("mundo")
5

Difieren en que esta última lanza ValueError cuando el argumento no es encontrado, mientras que aquélla retorna -1.

>>> s.find("world")
-1
>>> s.index("world")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

En ambos métodos la búsqueda ocurre de izquierda a derecha. Para buscar un conjunto de caracteres desde el final, utilícense del mismo modo rfind() y rindex().

>>> s = "C:/python36/python.exe"
>>> s.find("/")  # Retorna la primera ocurrencia.
2
>>> s.rfind("/")  # Retorna la última.
11

startswith() y endswith() indican si la cadena en cuestión comienza o termina con el conjunto de caracteres pasados como argumento, y retornan True o False en función de ello.

>>> s = "Hola mundo"
>>> s.startswith("Hola")
True
>>> s.endswith("mundo")
True
>>> s.endswith("world")
False

Ambos métodos son preferidos ante la opción de emplear slicing.

# Se prefiere startswith().
>>> s[:4] == "Hola"
True

Los métodos isdigit(), isnumeric() e isdecimal() determinan si todos los caracteres de la cadena son dígitos, números o números decimales.

>>> "1234".isnumeric()
True
>>> "1234".isdecimal()
True
>>> "abc123".isdigit()
False

Si bien estas definiciones resultam a priori similares, no lo son. La primera, isdigit(), considera caracteres que pueden formar números, incluidos aquellos correspondientes a lenguas orientales. isnumeric() es más amplia, pues incluye también caracteres de connotación numérica que no necesariamente son dígitos (por ejemplo, una fracción). La última, isdecimal(), es la más restrictiva al tener en cuenta únicamente números decimales; esto es, formados por dígitos del 0 al 9.

Las siguientes seis funciones de análisis son bastante explicativas por sí mismas.

# Determina si todos los caracteres son alfanuméricos.
>>> "abc123".isalnum()
True
# Determina si todos los caracteres son alfabéticos.
>>> "abcdef".isalpha()
True
>>> "abc123".isalpha()
False
# Determina si todas las letras son minúsculas.
>>> "abcdef".islower()
True
# Mayúsculas.
>>> "ABCDEF".isupper()
True
# Determina si la cadena contiene todos caracteres imprimibles.
>>> "Hola \t mundo!".isprintable()
False
# Determina si la cadena contiene solo espacios.
>>> "Hola mundo".isspace()
False
>>> "    ".isspace()
True

Métodos de transformación

Recuérdese que las cadenas son inmutables; por ende, todos los métodos a continuación no actúan sobre el objeto original sino que retornan uno nuevo.

capitalize() retorna la cadena con su primera letra en mayúscula.

>>> "hola mundo".capitalize()
'Hola mundo'

encode() codifica la cadena con el mapa de caracteres especificado y retorna una instancia del tipo bytes.

>>> "Hola mundo".encode("utf-8")
b'Hola mundo'

Los métodos center(), ljust() y rjust() alinean una cadena en el centro, la izquierda o la derecha respectivamente. Toman un argumento, la cantidad de caracteres respecto de la cual se producirá la alineación.

>>> "Hola".center(10)
'   Hola   '
>>> "Hola".ljust(10)
'Hola      '
>>> "Hola".rjust(10)
'      Hola'

Estos métodos son especialmente útiles al imprimir en forma de tabla para que ésta se mantenga alineada. Un segundo argumento indica con qué caracter se deben llenar los espacios vacíos (por defecto un espacio en blanco).

>>> "Hola".center(10, "*")
'***Hola***'

lower() y upper() retornan una copia de la cadena con todas sus letras en minúsculas o mayúsculas según corresponda.

>>> "Hola Mundo!".lower()
'hola mundo!'
>>> "Hola Mundo!".upper()
'HOLA MUNDO!'

swapcase(), por su parte, cambia las mayúsculas por minúsculas y viceversa.

>>> "Hola Mundo!".swapcase()
'hOLA mUNDO!'

Las funciones strip(), lstrip() y rstrip() remueven los espacios en blanco que preceden y/o suceden a la cadena.

>>> s = " Hola mundo! "
>>> s.strip()
'Hola mundo!'
# Remueve los de la derecha.
>>> s.rstrip()
' Hola mundo!'
# Remueve los de la izquierda.
>>> s.lstrip()
'Hola mundo! '

Por último, el método replace() ─ampliamente utilizado─ reemplaza una cadena por otra.

>>> s = "Hola mundo"
>>> s.replace("mundo", "world")
'Hola world'

Métodos de separación y unión

El método de división de una cadena según un caracter separador más empleado es split(), cuyo separador por defecto son espacios en blanco y saltos de línea.

>>> "Hola mundo!\nHello world!".split()
['Hola', 'mundo!', 'Hello', 'world!']

El separador puede indicarse como argumento.

>>> "Hola mundo!\nHello world!".split(" ")
['Hola', 'mundo!\nHello', 'world!']

O bien, para separar únicamente según saltos de línea:

# Equivalente a split("\n").
>>> "Hola mundo!\nHello world!".splitlines()
['Hola mundo!', 'Hello world!']

Un segundo argumento en split() indica cuál es el máximo de divisiones que puede tener lugar (-1 por defecto para representar una cantidad ilimitada).

>>> "Hola mundo hello world".split(" ", 2)
['Hola', 'mundo', 'hello world']

Un segundo método de separación es partition(), que retorna una tupla de tres elementos: el bloque de caracteres anterior a la primera ocurrencia del separador, el separador mismo, y el bloque posterior.

>>> s = "Hola mundo. Hello world!"
>>> s.partition(" ")
('Hola', ' ', 'mundo. Hello world!')

rpartition() opera de forma similar, pero realizando la búsqueda de derecha a izquierda.

>>> s.rpartition(" ")
('Hola mundo. Hello', ' ', 'world!')

Por último, el método join() ─sumamente útil─, que debe ser llamado desde una cadena que actúa como separador para unir dentro de una misma cadena resultante los elementos de una lista.

>>> " ".join(["Hola", "mundo"])
'Hola mundo'
>>> ", ".join(["C", "C++", "Python", "Java"])
'C, C++, Python, Java'

Como puede observarse, split() y join() son exactamente contrarios.

>>> sep = " "
>>> sep.join("Hola mundo!".split(sep))
'Hola mundo!'



Deja un comentario