4.2 Métodos avanzados de cadenas y tratamiento de caracteres Unicode

1

Inmutabilidad y métodos de transformación de cadenas

Las cadenas (str) en Python son secuencias inmutables de caracteres Unicode; cualquier transformación devuelve un nuevo objeto:

$$\text{s.strip()}, \quad \text{s.split(sep)}, \quad \text{s.replace(viejo, nuevo)}, \quad \text{s.upper()}, \quad \text{s.lower()}$$
Ejemplo:

Limpiamos una lectura de sensor que contiene caracteres de control invisibles:

$$\text{" \t15.42 mV\n ".strip()} \longrightarrow \text{"15.42 mV"}$$
2

Segmentación y unión canónica con split() y join()

El método join() es el estándar de alto rendimiento para concatenar secuencias de cadenas:

$$\text{delimitador.join(iterable)} \quad \longleftrightarrow \quad \text{cadena.split(separador)}$$
Ejemplo:

Reconstruimos una línea CSV a partir de una lista de componentes moleculares:

$$\text{','.join(['Au', 'Pt', 'Pd'])} \longrightarrow \text{"Au,Pt,Pd"}$$
3

Codificación de caracteres y el estándar universal Unicode

Python 3 utiliza internamente codificación Unicode (UTF-8/UTF-16/UTF-32) permitiendo representar cualquier símbolo:

$$\text{chr(codigo_entero)} \quad \longleftrightarrow \quad \text{ord(caracter)}$$
Ejemplo:

Obtenemos el símbolo del nanómetro o letras griegas para física cuántica:

$$\text{print(f"\u03bb = 532 \u00b1 2 nm")} \longrightarrow \lambda = 532 \pm 2\,\text{nm}$$
4

Búsqueda, coincidencia de prefijos y validación léxica

Disponemos de métodos booleanos para validar formatos antes de realizar conversiones numéricas:

$$\text{s.startswith(prefijo)}, \quad \text{s.endswith(sufijo)}, \quad \text{s.isdigit()}, \quad \text{s.find(subcadena)}$$
Ejemplo:

Verificamos si un archivo corresponde a una imagen de microscopía electrónica:

$$\text{"muestra_TEM_01.tiff".lower().endswith(('.tif', '.tiff'))} \longrightarrow \text{True}$$
Ejemplo 1: Conteo de subcadenas específicas
$$\text{secuencia = "ATGCGATCGATCGATC"}$$
$$\text{num_citosinas = secuencia.count('C')} \longrightarrow 4$$
Ejemplo 2: Sustitución encadenada de caracteres
$$\text{formula = "H2-O + C-O2"}$$
$$\text{limpia = formula.replace('-', '').replace(' ', '')} \longrightarrow \text{"H2O+CO2"}$$
Ejemplo 3: Extracción de código numérico ASCII/Unicode
$$\text{codigo = ord('\u03b1')} \longrightarrow 945$$
$$\text{caracter = chr(945)} \longrightarrow '\alpha'$$
Ejemplo 4: Relleno numérico y justificación con zfill() y rjust()
$$\text{numero_experimento = "42"}$$
$$\text{etiqueta = numero_experimento.zfill(5)} \longrightarrow \text{"00042"}$$
Ejemplo 5: Inversión de una cadena mediante slicing de paso negativo
$$\text{palabra = "NANOTEC"}$$
$$\text{invertida = palabra[::-1]} \longrightarrow \text{"CETONAN"}$$