Métodos de string en Python
Métodos de análisis
count() retorna el número de veces que se repite un conjunto de caracteres especificado.
>>> s = "Hola mundo"
>>> [Link]("Hola")
1
find() e index() retornan la ubicación (comenzando desde el cero) en la que se encuentra el
argumento indicado. Difieren en que index lanza ValueError cuando el argumento no es encontrado,
mientras find retorna -1.
>>> [Link]("mundo")
5
>>> [Link]("mundo")
5
>>> [Link]("world")
-1
>>> [Link]("world")
ValueError: substring not found
rfind() y rindex() Para buscar un conjunto de caracteres pero desde el final.
>>> s = "C:/python36/[Link]"
>>> [Link]("/") # Retorna la primera ocurrencia.
2
>>> [Link]("/") # Retorna la última.
11
startswith() y endswith() indican si la cadena comienza o termina con el conjunto de
caracteres pasados como argumento, retornando True o False.
>>> s = "Hola mundo"
>>> [Link]("Hola")
True
>>> [Link]("mundo")
True
>>> [Link]("world")
False
isdigit(), isnumeric() e isdecimal() determinan si todos los caracteres de la cadena
son dígitos, números o números decimales.
isdigit() considera caracteres que pueden formar números, incluidos los de lenguas orientales.
isnumeric() es más amplia e incluye caracteres de connotación numérica (por ejemplo, una fracción).
isdecimal() es la más restrictiva: solo acepta dígitos del 0 al 9.
>>> "1234".isnumeric()
True
>>> "1234".isdecimal()
True
>>> "abc123".isdigit()
False
Las siguientes 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
# Determina si todas las letras son mayúsculas.
>>> "ABCDEF".isupper()
True
# Determina si la cadena contiene solo caracteres imprimibles.
>>> "Hola \t mundo!".isprintable()
False
# Determina si la cadena contiene solo espacios.
>>> "Hola mundo".isspace()
False
>>> " ".isspace()
True
isidentifier() retorna True si la cadena es un identificador válido de Python (solo letras, dígitos y
guiones bajos, sin comenzar con dígito).
>>> "mi_variable".isidentifier()
True
>>> "2nombre".isidentifier()
False
>>> "class".isidentifier() # palabras reservadas también retornan True
True
istitle() retorna True si la cadena está en formato título, es decir, cada palabra comienza con
mayúscula y el resto son minúsculas.
>>> "Hola Mundo".istitle()
True
>>> "Hola mundo".istitle()
False
>>> "HOLA MUNDO".istitle()
False
Métodos de transformación
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'
casefold() retorna una versión de la cadena en minúsculas más agresiva que lower(), pensada para
comparaciones sin distinción de mayúsculas en múltiples idiomas. Por ejemplo, convierte la "ß" alemana
en "ss".
>>> "Straße".casefold()
'strasse'
>>> "Straße".lower()
'straße'
# Útil para comparar cadenas independientemente del idioma:
>>> "Straße".casefold() == "strasse".casefold()
True
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'
center(), ljust() y rjust() alinean una cadena en el centro, la izquierda o la derecha
respectivamente. Un segundo argumento indica el caracter de relleno (por defecto un espacio).
>>> "Hola".center(10)
' Hola '
>>> "Hola".ljust(10)
'Hola '
>>> "Hola".rjust(10)
' Hola'
>>> "Hola".center(10, "*")
'***Hola***'
expandtabs() reemplaza los caracteres de tabulación (\t) por espacios. El argumento indica el
tamaño de cada tabulación (por defecto 8).
>>> "col1\tcol2\tcol3".expandtabs()
'col1 col2 col3'
>>> "col1\tcol2".expandtabs(4)
'col1col2'
>>> "a\tb\tc".expandtabs(4)
'a b c'
format() realiza la interpolación de valores dentro de una cadena utilizando llaves {} como
marcadores de posición. Es una alternativa al operador % para formatear cadenas.
>>> "Hola, {}!".format("mundo")
'Hola, mundo!'
>>> "{0} + {1} = {2}".format(1, 2, 3)
'1 + 2 = 3'
>>> "{nombre} tiene {edad} años".format(nombre="Ana", edad=30)
'Ana tiene 30 años'
>>> "{:.2f}".format(3.14159)
'3.14'
format_map() similar a format(), pero recibe un diccionario (u objeto similar) directamente en lugar
de argumentos nombrados. Útil cuando la fuente de datos ya es un diccionario.
>>> datos = {"nombre": "Carlos", "edad": 25}
>>> "{nombre} tiene {edad} años".format_map(datos)
'Carlos tiene 25 años'
# A diferencia de format(**dict), format_map no copia el diccionario,
# lo que es más eficiente con objetos personalizados.
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() cambia las mayúsculas por minúsculas y viceversa.
>>> "Hola Mundo!".swapcase()
'hOLA mUNDO!'
title() retorna la cadena en formato título: la primera letra de cada palabra en mayúscula y el resto
en minúsculas.
>>> "hola mundo desde python".title()
'Hola Mundo Desde Python'
>>> "hola_mundo".title()
'Hola_Mundo'
strip(), lstrip() y rstrip() remueven los espacios en blanco (u otros caracteres
indicados) que preceden y/o suceden a la cadena.
>>> s = " Hola mundo! "
>>> [Link]()
'Hola mundo!'
>>> [Link]() # Remueve los de la derecha.
' Hola mundo!'
>>> [Link]() # Remueve los de la izquierda.
'Hola mundo! '
removeprefix() (Python 3.9+) retorna la cadena sin el prefijo indicado si la cadena comienza con él;
de lo contrario devuelve la cadena original sin modificar. A diferencia de lstrip(), el argumento se
interpreta como una subcadena exacta, no como un conjunto de caracteres.
>>> "[Link]".removeprefix("archivo")
'.csv'
>>> "Hola mundo".removeprefix("Chau")
'Hola mundo'
# Comparación con lstrip() para entender la diferencia:
>>> "__basura__ texto útil".lstrip("__basura__ ")
'exto útil' # elimina caracteres sueltos, no la subcadena
>>> "__basura__ texto útil".removeprefix("__basura__ ")
'texto útil' # elimina exactamente ese prefijo
removesuffix() (Python 3.9+) retorna la cadena sin el sufijo indicado si la cadena termina con él; de
lo contrario devuelve la cadena original.
>>> "[Link]".removesuffix(".csv")
'archivo'
>>> "[Link]".removesuffix(".txt")
'[Link]'
>>> "v1.2.3".removesuffix(".3")
'v1.2'
replace() ─ampliamente utilizado─ reemplaza una cadena por otra.
>>> s = "Hola mundo"
>>> [Link]("mundo", "world")
'Hola world'
maketrans() y translate() trabajan en conjunto para realizar reemplazos carácter a carácter
de forma eficiente. maketrans() crea una tabla de traducción y translate() la aplica.
# maketrans() con dos cadenas de igual longitud:
>>> tabla = [Link]("aeiou", "AEIOU")
>>> "hola mundo".translate(tabla)
'hOlA mUndO'
# maketrans() con diccionario (admite eliminación con None):
>>> tabla = [Link]({"a": "A", "e": None, "o": "0"})
>>> "hola mundo".translate(tabla)
'h0lA mund0'
# Tercer argumento: caracteres a eliminar
>>> tabla = [Link]("", "", "aeiou")
>>> "hola mundo".translate(tabla)
'hl mnd'
zfill() rellena la cadena con ceros a la izquierda hasta alcanzar el ancho indicado. Si la cadena
contiene un signo + o -, los ceros se insertan después del signo.
>>> "42".zfill(6)
'000042'
>>> "-42".zfill(6)
'-00042'
>>> "Hola".zfill(8)
'0000Hola'
Métodos de separación y unión
split() divide una cadena según un carácter separador (por defecto espacios en blanco).
>>> "Hola mundo!\nHello world!".split()
['Hola', 'mundo!', 'Hello', 'world!']
>>> "Hola mundo!\nHello world!".split(" ")
['Hola', 'mundo!\nHello', 'world!']
# Un segundo argumento indica el máximo de divisiones:
>>> "Hola mundo hello world".split(" ", 2)
['Hola', 'mundo', 'hello world']
rsplit() funciona igual que split(), pero realiza las divisiones comenzando desde el final de la cadena.
La diferencia es apreciable cuando se usa el argumento maxsplit.
>>> "uno dos tres cuatro".rsplit()
['uno', 'dos', 'tres', 'cuatro']
# Con maxsplit, la diferencia respecto a split() se hace visible:
>>> "uno dos tres cuatro".split(" ", 2)
['uno', 'dos', 'tres cuatro'] # divide desde la izquierda
>>> "uno dos tres cuatro".rsplit(" ", 2)
['uno dos', 'tres', 'cuatro'] # divide desde la derecha
splitlines() divide la cadena en cada salto de línea y retorna una lista.
>>> "Hola mundo!\nHello world!".splitlines()
['Hola mundo!', 'Hello world!']
partition() retorna una tupla de tres elementos: el bloque anterior a la primera ocurrencia del
separador, el separador mismo, y el bloque posterior.
>>> s = "Hola mundo. Hello world!"
>>> [Link](" ")
('Hola', ' ', 'mundo. Hello world!')
rpartition() opera de forma similar a partition(), pero realizando la búsqueda de derecha a
izquierda.
>>> [Link](" ")
('Hola mundo. Hello', ' ', 'world!')
join() 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'