2012-09-28 11 views
10

Sto scrivendo alcuni rapporti e vorrei sapere se esiste un modo più semplice per ottenere il seguente comportamento.Formato stringa di annidamento

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

Come si può vedere sto centrando il testo e quindi stampando un numero formattato in percentuale. Ma sto usando una funzione di formattazione all'interno di un'altra. Se possibile mi piacerebbe fare lo stesso in una singola funzione, il tipo di seguito.

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

Naturalmente sto cercando una soluzione generale, che avrebbe funzionato con tutti, o la maggior parte, delle opzioni di formattazione, non solo per l'allineamento

Grazie.

+2

Sembra che il problema è intrinsecamente annidato. Immagina di voler formattare una coppia di due numeri, dando ognuno almeno 3 caratteri e facendo in modo che l'intera coppia ne prenda almeno 10. Non riesco a vedere come lo scrivi diversamente da qualcosa di simile a '' {: 10} ' .format ('({: 3}, {: 3})'. format (1,2)) '. È la stessa cosa qui. È l'intera stringa che devi centrare, non un elemento particolare, quindi devi formattare la stringa formattata. @wim ha ragione che 'center' è probabilmente più leggibile, ma è effettivamente equivalente. – abarnert

+0

Grazie, per lo più sto cercando alcune idee. Non vedo come potresti farlo, ma forse altre funzioni o qualcosa potrebbero fare il trik. Come quello di @wim. Tuttavia, penso che ciò che mi piacerebbe fare sia limitato dalla funzione di formattazione stessa. – Darkade

+0

Se stai cercando qualcosa di più potente e flessibile (ma complesso) del 'formato' incorporato, per alcuni anni è stato discusso il' formato', le persone hanno suggerito tutti i tipi di alternative e le librerie codificate quello ha implementato la maggior parte di loro. Prova a cercare PyPI, e forse la collezione di ricette di ActiveState (perché questo stava accadendo mentre PyPI era ancora in sviluppo) e forse troverai qualcosa che fa ciò di cui hai bisogno. (Non ho raccomandazioni specifiche.) – abarnert

risposta

8

Un'opzione più leggibile potrebbe essere str.center

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

Grazie, questo risolve il problema. Tuttavia non è abbastanza generale. Ma come @abarnert ha commentato, quello che voglio fare è probabilmente intrinsecamente annidato – Darkade