Convertir cadenas a números en Python: guía y ejemplos

1. Introducción

Al programar en Python, la conversión de tipos de datos es una técnica sumamente importante. En particular, la habilidad de convertir entre cadenas y números en ambos sentidos es indispensable para la entrada/salida de datos y el procesamiento de cálculos. Por ejemplo, con frecuencia se presentan situaciones en las que se calculan como números las cadenas que el usuario introdujo en un formulario, o se formatean como cadenas los números resultantes de los cálculos para mostrarlos. Sin embargo, mezclar datos de tipos distintos puede provocar errores, por lo que quienes se inician en Python deben tener cuidado. En este artículo presentamos los métodos de conversión en Python «de cadena a número» y «de número a cadena» y, junto con ejemplos prácticos, explicamos en detalle el manejo de errores y cómo abordar casos especiales. Esperamos que sirva de ayuda para adquirir habilidades desde la programación básica hasta aplicaciones más avanzadas en Python. En la siguiente sección explicaremos en detalle los métodos básicos de conversión de tipos en Python.

2. Conversión básica de tipos en Python

En Python, cuando los tipos de datos difieren, a menudo se limitan las operaciones directas, por lo que es necesario convertir los datos entre tipos distintos. Al comprender cómo convertir cadenas a números y viceversa, podrás escribir código más flexible y con menos errores. En esta sección, explicamos las conversiones de tipos básicas en Python usando int() y float().

Conversión a enteros

Cuando un número se recibe como cadena, para realizar cálculos numéricos en Python primero es necesario convertir esa cadena a un entero o a un número de coma flotante. Por ejemplo, para convertir la cadena «42» en el entero 42, usa la función int() como sigue.
str_number = "42"
int_number = int(str_number)
print(int_number)  # Salida: 42
De este modo, con la función int() puedes convertir cadenas a enteros. Si la conversión se realiza con éxito, el valor ya puede usarse como número. Ten en cuenta que intentar convertir a entero una cadena que contiene un punto decimal, como "42.0", provocará un error. Para una conversión a entero, solo son válidos valores enteros; si contiene un punto decimal, debes usar float().

Conversión a números de coma flotante

Un número de coma flotante es un tipo que puede conservar la parte decimal de un valor. En Python, con la función float() puedes convertir una cadena en un número de coma flotante. Por ejemplo, para convertir la cadena «3.14» a un número de coma flotante, usa el siguiente código.
str_float = "3.14"
float_number = float(str_float)
print(float_number)  # Salida: 3.14
De este modo, al usar float() puedes convertir cadenas a números de coma flotante. Además, también puedes convertir cadenas en notación exponencial con float(); se admiten formatos como "1.23e-4".
str_exp = "1.23e-4"
float_exp = float(str_exp)
print(float_exp)  # Salida: 0.000123

Conversión de números a cadenas

Por el contrario, hay muchas situaciones en las que necesitas convertir un número a cadena. Por ejemplo, cuando quieres concatenar un número con otras cadenas para mostrarlo. En estos casos, utiliza la función str().
num = 42
str_num = str(num)
print("Resultado de convertir el número a cadena: " + str_num)  # Salida: Resultado de convertir el número a cadena: 42
Así, la función str() realiza la conversión de números a cadenas y permite manipular cadenas que incluyen números. Una vez comprendidas las conversiones básicas de tipos, como ampliación, veamos también cómo convertir otras bases numéricas y cadenas de ancho completo.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Casos avanzados: conversión entre múltiples bases y dígitos de ancho completo

Una vez comprendidas las conversiones básicas de tipos en Python, pasemos a casos más avanzados. En esta sección se explica en detalle cómo convertir a distintos sistemas (como binario y hexadecimal), así como el tratamiento de números que contienen caracteres de ancho completo.

Conversión de binario, octal y hexadecimal

La función int() de Python puede convertir no solo cadenas en base 10, sino también en base 2, 8 y 16. Para ello, se especifica la base (sistema) como segundo argumento de la función int(). Por ejemplo, para convertir cadenas binarias o hexadecimales a enteros, se escribe así:
binary_str = "1010"  # Cadena binaria
octal_str = "12"  # Cadena octal
hex_str = "a"  # Cadena hexadecimal

int_binary = int(binary_str, 2)
int_octal = int(octal_str, 8)
int_hex = int(hex_str, 16)

print(int_binary)  # Salida: 10
print(int_octal)  # Salida: 10
print(int_hex)  # Salida: 10
Así, las cadenas en base 2, 8 y 16 pueden convertirse a enteros con int() indicando la base correspondiente. Esta funcionalidad es especialmente útil al trabajar con datos que usan distintos sistemas de numeración.

Manejo de dígitos de ancho completo y caracteres especiales

Si una entrada del usuario contiene dígitos de ancho completo o caracteres especiales, al intentar convertirla directamente en Python pueden producirse errores. En particular, cuando en la entrada numérica en japonés se mezclan caracteres de ancho completo, a menudo Python no puede procesarlos correctamente, por lo que se recomienda usar el método replace() para convertir de ancho completo a ancho medio. A continuación, un ejemplo que convierte una cadena de ancho completo a ancho medio y luego a número.
str_num_fullwidth = "12345"
str_num_halfwidth = str_num_fullwidth.translate(str.maketrans('0123456789', '0123456789'))

print(int(str_num_halfwidth))  # Salida: 12345
Con este método, también puedes convertir cadenas numéricas de ancho completo a números. Si también necesitas convertir el punto decimal de ancho completo, añade lo siguiente:
str_float_fullwidth = "123.456"
str_float_halfwidth = str_float_fullwidth.translate(str.maketrans('0123456789.', '0123456789.'))

print(float(str_float_halfwidth))  # Salida: 123.456

Conversión de números en kanji

En Python, usando el módulo Unicode, es posible convertir algunos números en kanji a valores numéricos. Con unicodedata.numeric() puedes convertir caracteres como 「一」 o 「百」 a números de coma flotante.
import unicodedata

kanji_num = '五'
converted_num = unicodedata.numeric(kanji_num)
print(converted_num)  # Salida: 5.0
Sin embargo, no admite números en kanji de varios caracteres (p. ej., 「十五」), por lo que si necesitas un procesamiento más complejo se recomienda usar bibliotecas adicionales o personalizar con expresiones regulares. Como ves, Python ofrece diversas formas de convertir cadenas numéricas. En la siguiente sección se explican en detalle cómo determinar si un valor de entrada es convertible y cómo manejar errores.

4. Manejo de errores y validación de la entrada

En el procesamiento de datos, pueden darse casos en los que los datos introducidos por el usuario o los recibidos externamente no puedan convertirse correctamente a valores numéricos. Por ello, es importante determinar de antemano si los datos pueden convertirse a número y, en caso de que se produzca un error durante la conversión, aplicar un manejo adecuado. En esta sección explicamos los métodos de validación de la entrada y manejo de errores.

isdigit() y expresiones regulares para determinar si es un número

Como método para determinar por adelantado si una cadena puede convertirse a un valor numérico, se pueden usar el método isdigit() de Python o expresiones regulares. isdigit() devuelve True cuando la cadena está compuesta únicamente por dígitos, pero devuelve False si contiene un punto decimal o un signo negativo. Por ello, es útil cuando solo se quiere verificar enteros.
def is_integer(input_str):
    return input_str.isdigit()

# Ejemplo de uso
print(is_integer("123"))  # Salida: True
print(is_integer("3.14"))  # Salida: False
print(is_integer("-123"))  # Salida: False
Por otro lado, para determinar números que incluyan números de coma flotante y negativos, resulta útil usar expresiones regulares. En el siguiente ejemplo, se configura para que también devuelva True cuando hay un “+” o “-” delante del número, así como para valores que incluyen un punto decimal.
import re

def is_numeric(input_str):
    return bool(re.match(r'^[+-]?d+(.d+)?$', input_str))

# Ejemplo de uso
print(is_numeric("123"))       # Salida: True
print(is_numeric("-123.45"))   # Salida: True
print(is_numeric("3.14.15"))   # Salida: False
print(is_numeric("abc"))       # Salida: False
De este modo, al usar expresiones regulares se puede determinar con mayor flexibilidad si algo es numérico, lo que resulta útil al procesar datos de entrada complejos.

Manejo de errores: tratamiento mediante excepciones

En Python, si los datos no son adecuados al convertir una cadena a un número, se produce un error (ValueError). Para capturar este error y continuar con la ejecución, lo habitual es manejar la excepción usando un bloque try-except. En el siguiente ejemplo, si se produce un error al intentar convertir una cadena a entero, se muestra un mensaje de error adecuado.
def convert_to_int(input_str):
    try:
        return int(input_str)
    except ValueError:
        print(f"Error: '{input_str}' no se puede convertir a un entero.")
        return None

# Ejemplo de uso
print(convert_to_int("123"))  # Salida: 123
print(convert_to_int("abc"))  # Salida: Error: 'abc' no se puede convertir a un entero.
De este modo, al incorporar el manejo de excepciones, el programa puede continuar funcionando sin detenerse incluso cuando se producen errores. Además, la retroalimentación al usuario es más clara y es más fácil tratar errores de entrada, como equivocaciones al escribir. Si la validación de los datos de entrada y el manejo de errores se realizan correctamente, aumenta la fiabilidad del código. En la siguiente sección veremos cómo convertir de forma masiva los elementos de una lista.

5. Cómo convertir en lote los elementos de una lista

Al procesar datos, puede haber casos en los que sea necesario convertir en lote a números los elementos de una lista compuesta por cadenas. Por ejemplo, los datos obtenidos de archivos CSV o de fuentes externas suelen guardarse como cadenas. En esta sección, presentaremos cómo realizar conversiones en lote usando comprensiones de listas de Python.

Conversión en lote con comprensiones de listas

En Python, además de procesar repetidamente cada elemento de una lista mediante bucles, puedes usar comprensiones de listas para realizar la conversión de datos de forma concisa y eficiente. Una comprensión de lista es una forma de aplicar una operación específica a cada elemento de una lista y generar una lista nueva. Por ejemplo, para convertir una lista que contiene números en formato de cadena en una lista de enteros, puedes usar el siguiente código.
str_list = ["10", "20", "30", "40", "50"]
int_list = [int(i) for i in str_list]

print(int_list)  # Salida: [10, 20, 30, 40, 50]
En este ejemplo, gracias a la comprensión de lista [int(i) for i in str_list], cada elemento de str_list se convierte a entero con la función int() y se crea una nueva lista int_list. Este método permite procesar grandes volúmenes de datos con poco código, mejorando la legibilidad y el rendimiento.

Conversión en lote con manejo de errores

Si la lista contiene datos que no pueden convertirse (por ejemplo, cadenas no numéricas o caracteres especiales), se producirá un error. En ese caso, puedes incorporar condiciones o manejo de excepciones en una comprensión de lista para evitar errores de conversión. A continuación se muestra un ejemplo que convierte a enteros solo los elementos convertibles.
str_list = ["10", "20", "abc", "30", "40"]

int_list = []
for i in str_list:
    try:
        int_list.append(int(i))
    except ValueError:
        print(f"Warning: '{i}' no se pudo convertir a un entero.")

print(int_list)  # Salida: [10, 20, 30, 40]
En este código, se utiliza un bloque try-except para convertir cadenas a enteros y, si no se pueden convertir, mostrar un mensaje de error. Al añadir a int_list solo los elementos convertibles mediante el método append(), el proceso continúa incluso si se producen errores y se obtiene el resultado de la conversión. La conversión en lote de listas es una técnica muy útil para procesar grandes volúmenes de datos. En la siguiente sección, resumiremos el artículo y organizaremos lo aprendido en esta ocasión.

6. Resumen

En este artículo explicamos, desde lo básico hasta lo avanzado, los métodos de conversión en Python de «cadena a número» y de «número a cadena». Al comprender la importancia de la conversión de tipos en el procesamiento de datos y cómo realizarla de forma eficiente, se amplía el abanico de operaciones en la programación con Python. A continuación, resumimos brevemente el contenido de cada sección。

Repaso del artículo

  1. Introducción
  • Explicamos en qué situaciones se necesita la conversión entre cadenas y números. Mostramos por qué la conversión de tipos es importante en el cálculo numérico y en la visualización de datos.
  1. Conversión de tipos básica en Python
  • Como métodos básicos de conversión de tipos, aprendimos a cambiar el tipo de datos entre cadenas y números utilizando las funciones int(), float() y str().
  1. Ejemplos avanzados: conversión de varias bases y de dígitos de ancho completo
  • Presentamos cómo convertir números en base 2, 8 y 16 a enteros y cómo convertir caracteres de ancho completo a ancho medio para tratarlos como números. Además, explicamos cómo convertir numerales en kanji a valores numéricos utilizando unicodedata.numeric().
  1. Manejo de errores y validación de la entrada
  • Teniendo en cuenta que pueden producirse errores durante la conversión numérica, presentamos métodos para comprobar de antemano si un valor es numérico usando isdigit() y expresiones regulares, y cómo manejar los errores mediante el control de excepciones con try-except.
  1. Cómo convertir de forma masiva los elementos de una lista
  • Aprendimos cómo realizar conversiones en lote con comprensiones de listas y cómo actuar cuando se producen errores, adquiriendo habilidades para procesar de forma eficiente incluso cuando hay grandes volúmenes de datos。

Cómo aplicarlo en el futuro

La conversión de tipos en Python está presente en las operaciones básicas de cualquier procesamiento de datos y de cualquier programa. En el desarrollo real, poner en práctica conversiones de tipos adecuadas y un manejo de errores correcto ayudará a reducir fallos y a escribir código de mayor calidad. Además, además de los métodos básicos aprendidos en esta ocasión, adquirir técnicas de conversión de datos más avanzadas te permitirá abordar de forma eficiente incluso procesos de datos complejos。 A través de este artículo, creemos que has podido aprender los conocimientos y métodos necesarios para la conversión de tipos en Python. Esperamos que te resulte útil en el desarrollo de tus futuros programas.