¿Cuál es una forma pitónica de rellenar una cadena numérica con ceros a la izquierda, es decir, que la cadena numérica tiene una longitud específica?
python
string
zero-padding
Nicolas Gervais
fuente
fuente
python >= 2.6
son incorrectos Esa sintaxis no funcionapython >= 3
. Puede cambiarlo apython < 3
, pero ¿puedo sugerirle que siempre use paréntesis y omita los comentarios por completo (fomentando el uso recomendado)?'{:03d} {:03d}'.format(1, 2)
asigna implícitamente los valores en orden.print
declaración, ¿cuándo debería ser unaprint
función en Python 3? Edité en los parens Como solo se está imprimiendo una cosa, ahora funciona de manera idéntica en Py2 y Py3.Solo usa el método rjust del objeto string.
Este ejemplo hará una cadena de 10 caracteres de largo, rellenando según sea necesario.
fuente
Además
zfill
, puede usar el formato de cadena general:La documentación para el formato de cadenas y f-cuerdas .
fuente
format
en su lugar, y las personas generalmente interpretan esto como una intención de desaprobar.Para Python 3.6+ usando f-strings:
Para Python 2 a Python 3.5:
fuente
si quieres lo contrario:
fuente
str(n).zfill(width)
funcionará constring
s,int
s,float
s ... y es Python 2. x y 3. x compatible:fuente
Para los que vinieron aquí a entender y no solo una respuesta rápida. Hago esto especialmente para cadenas de tiempo:
fuente
str.zfill
está específicamente destinado a hacer esto:Tenga en cuenta que está específicamente diseñado para manejar cadenas numéricas según lo solicitado, y mueve
+
ao-
al comienzo de la cadena:Aquí está la ayuda sobre
str.zfill
:Actuación
Este también es el más alternativo de los métodos alternativos:
Para comparar mejor las manzanas con las manzanas para el
%
método (tenga en cuenta que en realidad es más lento), que de lo contrario calculará previamente:Implementación
Con un poco de excavación, encontré la implementación del
zfill
método enObjects/stringlib/transmogrify.h
:Veamos este código C.
Primero analiza el argumento posicionalmente, lo que significa que no permite argumentos de palabras clave:
Luego comprueba si tiene la misma longitud o más, en cuyo caso devuelve la cadena.
zfill
llamadaspad
(estapad
función también es llamada porljust
,rjust
ycenter
así). Básicamente, esto copia el contenido en una nueva cadena y rellena el relleno.Después de llamar
pad
,zfill
mueve cualquier original anterior+
o-
al comienzo de la cadena.Tenga en cuenta que para que la cadena original sea realmente numérica no se requiere:
fuente
+
y-
, ¡y agregué un enlace a los documentos!¡Vea la documentación impresa para todos los detalles interesantes!
Actualización para Python 3.x (7.5 años después)
Esa última línea ahora debería ser:
Es decir,
print()
ahora es una función, no una declaración. Tenga en cuenta que todavía prefiero elprintf()
estilo Old School porque, IMNSHO, se lee mejor, y porque, um, he estado usando esa notación desde enero de 1980. Algo ... perros viejos ... algo algo ... nuevos trucos.fuente
"%0*d" % (width, x)
es interpretado por python?Cuando se usa Python
>= 3.6
, la forma más limpia es usar cadenas f con formato de cadena :Preferiría formatear con un
int
, ya que solo entonces el signo se maneja correctamente:fuente
Para códigos postales guardados como enteros:
fuente
Comparación rápida de tiempos:
He hecho diferentes pruebas de diferentes repeticiones. Las diferencias no son enormes, pero en todas las pruebas, la
zfill
solución fue más rápida.fuente
Otro enfoque sería utilizar una lista de comprensión con una condición de verificación de longitudes. A continuación se muestra una demostración:
fuente
Está bien también:
entonces la salida será: "02:07:03"
fuente
También puede repetir "0", anteponerlo
str(n)
y obtener el corte de ancho más a la derecha. Pequeña expresión rápida y sucia.fuente