Curso de Programación en Python/printf-styleFormatting

De WikiCabal
Saltar a: navegación, buscar

Formato de las cadenas en el estilo de printf

Nota

Las operaciones de formato descritas aquí exhiben una variedad de caprichos que conducen a una serie de errores comunes (ej: falta Mostrar tuples y Diccionarios correctamente). Usando el nuevo formato ayuda a evitar estos errores y también proporciona un enfoque generalmente más potente, flexible y extensible para dar formato al texto.

Los Objetos String tienen una operación incorporada única: el operador de %. Esto también se conoce como el operador de de formato de cadena o interpolación.

Si formato requiere un solo argumento, los valores pueden ser una sola no-tuple objeto. De lo contrario, los valores deben ser una tupla con exactamente el número de elementos especificado por la cadena de formato, o de un solo objeto de asignación ej. un diccionario.

Un especificador de conversión contiene dos o más caracteres y tiene los siguientes componentes, que deben ocurrir en este orden:

  1. El caracter de formato de cadena: '%', que significa el inicio de un especificador.
  2. La llave de mapa (opcional) entre parentasis, en formato de: (AlgúnNombre).
  3. caracteres de conversion (opcional)
  4. Ancho minimo del campo (opcional). Si especificado con un '*' (asterisco), el ancho se obtiene del siguiente elemento en el tuple y el objeto a convertir sigue después del ancho y precisión opcional.
  5. Precisión (opcional), se indica con un '.' (punto) seguieda por el operación de precisión. Si especificado con un '*' (asterisco), la precición actual se obtiene del siguiente elemento en el tuple y el valor a convertir sigue después de la prcisión.
  6. Modificador de ancho (opcional).
  7. Tipo de conversión.

Cuando el argumento de la derecha es un diccionario (o otro objeto de tipo mapa), Los formatos el la cadena DEBEN incuir una llave de mapa (en parentasis) en el diccionario que sigue después del caracter '%'.

Las llaves de conversión son:

LlaveSignificado
'#'Convertir al valor alternativo especificado por el caracter definido abajo.
'0'No va agregar espacios antes o después de valores numéricos.
'-'El valor convertido seria adaptado al izquierda (hace caso omiso de ignorar el '0' conversion si los dos son especificados).
' '(un espacio) debe ser antes de un número positivo (o cadena vacio) producido por un conversion de signo./td>
'+'Un caracter de signo ('+' or '-') seria antes del caracter de conversión (hace caso omiso de ignorar el ' ' (espacio) llave).

Un especificador de ancho (h, l o L) esta ignorado en Python, entonces ej: %ld es mismo a %d.

Tipos de conversión son:

ConversiónSignificoNotas
'd'Entero con signo, decimal. 
'i'Entero con signo, decimal. 
'o'Octol con signo.(1)
'u' Obsolete type – es identico al 'd'. 
'x'hexadecimal con signo, minusculas.(2)
'X'hexadecimal con signo, mayusculas.(2)
'e'Float exponencial minusculas.(3)
'E'Float exponencial mayusculas.(3)
'f'Float decimal.(3)
'F'Float decimal.(3)
'g'Float. Uses lowercase exponential format if exponent is less than -4 or not less than precision, decimal format otherwise.(4)
'G'Floating point format. Uses uppercase exponential format if exponent is less than -4 or not less than precision, decimal format otherwise.(4)
'c'Single character (accepts integer or single character string). 
'r'String (converts any Python object using repr()).(5)
's'String (converts any Python object using str()).(5)
'a'String (converts any Python object using ascii()).(5)
'%'No argument is converted, results in a '%' character in the result. 

Notes:

  1. The alternate form causes a leading zero ('0') to be inserted between left-hand padding and the formatting of the number if the leading character of the result is not already a zero.

  2. The alternate form causes a leading '0x' or '0X' (depending on whether the 'x' or 'X' format was used) to be inserted between left-hand padding and the formatting of the number if the leading character of the result is not already a zero.

  3. The alternate form causes the result to always contain a decimal point, even if no digits follow it.

    The precision determines the number of digits after the decimal point and defaults to 6.

  4. The alternate form causes the result to always contain a decimal point, and trailing zeroes are not removed as they would otherwise be.

    The precision determines the number of significant digits before and after the decimal point and defaults to 6.

  5. If precision is N, the output is truncated to N characters.


Since Python strings have an explicit length, %s conversions do not assume that '\0' is the end of the string.

Changed in version 3.1: %f conversions for numbers whose absolute value is over 1e50 are no longer replaced by %g conversions.