In Python 2.7 Voglio stampare gli oggetti datetime utilizzando un modello formattato a stringa. Per qualche motivo l'uso della giustificazione sinistra/destra non stampa correttamente la stringa.Allineamento formato stringa data/ora
import datetime
dt = datetime.datetime(2013, 6, 26, 9, 0)
l = [dt, dt]
template = "{0:>25} {1:>25}" # right justify
print template.format(*l) #print items in the list using template
Questo sarà il risultato:
>25 >25
Invece di
2013-06-26 09:00:00 2013-06-26 09:00:00
C'è qualche trucco per rendere datetime oggetti di stampa utilizzando i modelli di formato stringa?
Sembra funzionare quando forzo l'oggetto datetime in str()
print template.format(str(l[0]), str(l[1]))
ma preferisco non avere a che fare dal momento che sto cercando di stampare un elenco di valori, alcune delle quali non sono archi. L'intero scopo di creare un modello di stringa è di stampare gli elementi nell'elenco.
Mi manca qualcosa sulla formattazione delle stringhe o questo sembra un bug python per chiunque?
SOLUZIONE
@mgilson sottolineato la soluzione che ho perso nella documentazione. link
Due bandiere di conversione sono attualmente supportate: '!' S che chiama str() sul valore, e '! R' che chiama repr().
Alcuni esempi:
"Harold's a clever {0!s}" # Calls str() on the argument first
"Bring out the holy {name!r}" # Calls repr() on the argument first
Sarò dannatamente Questo è esattamente ciò di cui avevo bisogno. Trovato la riga nella documentazione per questo (che ho perso). [link] (http://docs.python.org/2/library/string.html#format-string-syntax) _Due flag di conversione sono attualmente supportati: '! s' che chiama str() sul valore e '! r' che chiama repr() ._ –
@ MarcelWilson - Non lo sapevo nemmeno fino a quando non sono andato a cercarlo. – mgilson