2012-09-28 23 views
10

Estoy escribiendo algunos informes, y me gustaría saber si hay una manera más simple de obtener el siguiente comportamiento.Formato de cadena de anidación

>>> '{:-^60}'.format('Percentage used: {:.2%}'.format(.4)) 
'------------------Percentage used: 40.00%-------------------' 

Como puedes ver, estoy centrando el texto y luego imprimiendo un número formateado en porcentaje. Pero estoy usando una función de formato dentro de otra. Si es posible, me gustaría hacer lo mismo en una sola función, más o menos lo siguiente.

'$SOMETHING GOES HERE'.format(header = 'Percentage Used:',percentage = .4) 

Por supuesto que estoy buscando una solución general, que sería trabajar con todos, o la mayoría, de las opciones de formateo, no sólo para la alineación

Gracias.

+2

Parece que su problema se anida inherentemente. Imagina que quieres formatear un par de dos números, dando a cada uno al menos 3 caracteres, y haciendo que todo el grupo tome al menos 10. No veo cómo escribirías eso, excepto algo como ''{: 10}' .format ('({: 3}, {: 3})'. format (1,2)) '. Es lo mismo aquí. Es toda la cadena que necesita centrar, no cualquier elemento en particular, por lo que debe formatear la cadena formateada. @wim tiene razón en que 'center' es probablemente más legible, pero es efectivamente equivalente. – abarnert

+0

Gracias, sobre todo, estoy buscando algunas ideas. No veo cómo podrías hacerlo tampoco, pero tal vez otras funciones o algo podría hacer el trik. Como el de @wim. Sin embargo, creo que lo que me gustaría hacer está limitado por la función de formato en sí. – Darkade

+0

Si está buscando algo más poderoso y flexible (pero complejo) que el 'formato 'incorporado, durante unos años se discutió sobre el formato' de tiempo', la gente sugirió todo tipo de alternativas y bibliotecas codificadas que implementó la mayoría de ellos. Intente buscar PyPI, y tal vez la colección de recetas de ActiveState (porque esto estaba sucediendo mientras PyPI estaba todavía en desarrollo) y tal vez encuentre algo que haga lo que necesita. (No tengo recomendaciones específicas.) – abarnert

Respuesta

8

Una opción más fácil de leer podría ser str.center

>>> 'Percentage used: {:.2%}'.format(.4).center(60, '-') 
'------------------Percentage used: 40.00%-------------------' 
+2

Gracias, eso resuelve el problema en cuestión. Sin embargo, no es del todo general. Pero como comentó @abarnert, lo que quiero hacer es probablemente anidado de forma inherente – Darkade