In Python 2.7 möchte ich datetime-Objekte mit einer string-formatierten Vorlage drucken. Aus irgendeinem Grund wird die Zeichenfolge nicht korrekt gedruckt, wenn links- / rechtsbündiges Recht verwendet wird.
%Vor%Dies wird resultieren:
%Vor%Anstelle von
%Vor%Gibt es einen Trick, um Datetime-Objekte mit Zeichenfolgenformatvorlagen zu drucken?
Es scheint zu funktionieren, wenn ich das Datetime-Objekt in str ()
erzwinge %Vor%Aber ich möchte das lieber nicht machen, da ich versuche, eine Liste von Werten zu drucken, von denen einige keine Zeichenfolgen sind. Der Sinn einer String-Vorlage besteht darin, die Elemente in der Liste zu drucken.
Fehle ich etwas an der Formatierung von Strings oder sieht das für jeden wie ein Python-Bug aus?
LÖSUNG
@mgilson wies auf die Lösung hin, die ich in der Dokumentation verpasst habe. Link
%Vor%Derzeit werden zwei Conversion-Flags unterstützt: '! s', das str () aufruft auf den Wert und '! r', die repr () aufruft.
Einige Beispiele:
Das Problem hier ist, dass datetime
Objekte eine __format__
Methode haben, die im Grunde nur ein Alias für datetime.strftime
ist. Wenn Sie die Formatierung durchführen, wird der Formatfunktion der String '>25'
übergeben, der, wie Sie gesehen haben, dt.strftime('>25')
nur '>25'
zurückgibt.
Um dies zu umgehen, geben Sie hier an, dass das Feld explizit mit !s
:
(getestet auf Python 2.6 und 2.7).
Versuchen Sie Folgendes:
%Vor% Es funktioniert, indem zuerst die datetime
-Objekte in eine Zeichenkette umgewandelt werden, die dann mit der format
-Methode ohne Probleme formatiert werden kann.
Tags und Links python datetime string-formatting