Formato de Cadenas en Python
De la documentación de Python 3
Las operaciones de formato descritas aquí (operador %) exhiben una variedad de peculiaridades que conducen a varios errores comunes [...]. Usar los literales de cadena formateados más nuevos o f-strings [...] ayuda a evitar estos errores. Estas alternativas también proporcionan enfoques más potentes, flexibles y extensibles para formatear texto.
% operator
Prefiera los Literales de Cadena
Para código nuevo, se recomienda encarecidamente usar str.format, o literales de cadena formateados (Python 3.6+) sobre el operador %.
# % operator: formato de cadena de estilo antiguo (no recomendado para código nuevo)
name = 'Pete'
'Hello %s' % name # %s = marcador de posición de cadena
"Hello Pete"
Podemos usar el especificador de formato %d para convertir un valor int a una cadena:
num = 5
'I have %d apples' % num
"I have 5 apples"
str.format
Python 3 introdujo una nueva forma de formatear cadenas que luego fue retroportada a Python 2.7. Esto hace que la sintaxis para el formato de cadenas sea más regular.
# str.format() method: formato de cadena moderno (Python 2.7+)
name = 'John'
age = 20
"Hello I'm {}, my age is {}".format(name, age) # {} = marcador de posición
"Hello I'm John, my age is 20"
"Hello I'm {0}, my age is {1}".format(name, age)
"Hello I'm John, my age is 20"
Formatted String Literals or f-Strings
Si está utilizando Python 3.6+, las f-Strings de cadenas son la forma recomendada de formatear cadenas.
De la documentación de Python 3
Un literal de cadena formateado o f-string es un literal de cadena que está prefijado con f o F. Estas cadenas pueden contener campos de reemplazo, que son expresiones delimitadas por llaves {}. Si bien otros literales de cadena siempre tienen un valor constante, las cadenas formateadas son realmente expresiones evaluadas en tiempo de ejecución.
# f-string: forma recomendada de formatear cadenas (Python 3.6+)
name = 'Elizabeth'
f'Hello {name}!' # El prefijo f permite expresiones en {}
'Hello Elizabeth!'
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
fmtf o FformatstrIncluso es posible hacer aritmética en línea con ellas:
# Las f-strings soportan expresiones: pueden incluir cálculos dentro de {}
a = 5
b = 10
f'Five plus ten is {a + b} and not {2 * (a + b)}.' # Evalúa expresiones
'Five plus ten is 15 and not 30.'
F-Strings Multilínea
name = 'Robert'
messages = 12
(
f'Hi, {name}. '
f'You have {messages} unread messages'
)
'Hi, Robert. You have 12 unread messages'
El especificador =
Esto imprimirá la expresión y su valor:
# Especificador =: imprime tanto el nombre de la variable como el valor (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
f'date and time: {now=}' # Imprime "now='Nov/14/2022 - 20:50:01'"
"date and time: now='Nov/14/2022 - 20:50:01'"
Añadir espacios o caracteres
name = 'Robert'
f"{name.upper() = :-^20}"
'name.upper() = -------ROBERT-------'
f"{name.upper() = :^20}"
'name.upper() = ROBERT '
f"{name.upper() = :20}"
'name.upper() = ROBERT '
Formato de Dígitos
Añadir separador de miles
a = 10000000
f"{a:,}"
'10,000,000'
Redondeo
a = 3.1415926
f"{a:.2f}"
'3.14'
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
f"{a:.2f}"?Mostrar como Porcentaje
a = 0.816562
f"{a:.2%}"
'81.66%'
Tabla de formato de números
| Número | Formato | Salida | Descripción |
|---|---|---|---|
| 3.1415926 | {:.2f} | 3.14 | Formato flotante 2 decimales |
| 3.1415926 | {:+.2f} | +3.14 | Formato flotante 2 decimales con signo |
| -1 | {:+.2f} | -1.00 | Formato flotante 2 decimales con signo |
| 2.71828 | {:.0f} | 3 | Formato flotante sin decimales |
| 4 | {:0>2d} | 04 | Rellena el número con ceros (relleno izq., ancho 2) |
| 4 | {:x<4d} | 4xxx | Rellena el número con x’s (relleno der., ancho 4) |
| 10 | {:x<4d} | 10xx | Rellena el número con x’s (relleno der., ancho 4) |
| 1000000 | {:,} | 1,000,000 | Formato de número con separador de coma |
| 0.35 | {:.2%} | 35.00% | Formato de porcentaje |
| 1000000000 | {:.2e} | 1.00e+09 | Notación exponencial |
| 11 | {:11d} | 11 | Alineado a la derecha (predeterminado, ancho 10) |
| 11 | {:<11d} | 11 | Alineado a la izquierda (ancho 10) |
| 11 | {:^11d} | 11 | Alineado al centro (ancho 10) |
Template Strings
Un mecanismo más simple y menos potente, pero se recomienda cuando se manejan cadenas generadas por usuarios. Debido a su menor complejidad, las cadenas de plantilla son una opción más segura.
from string import Template
name = 'Elizabeth'
t = Template('Hey $name!')
t.substitute(name=name)
'Hey Elizabeth!'