9

Python 2.7 では、文字列形式のテンプレートを使用して datetime オブジェクトを出力したいと考えています。何らかの理由で、左揃え/右揃えを使用すると、文字列が正しく出力されません。

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

これにより、次の結果が得られます。

>25 >25

それ以外の

  2013-06-26 09:00:00       2013-06-26 09:00:00

文字列形式のテンプレートを使用して datetime オブジェクトを印刷するためのトリックはありますか?

datetime オブジェクトを str() に強制するとうまくいくようです

print template.format(str(l[0]), str(l[1]))

しかし、文字列ではない値のリストを出力しようとしているので、そうする必要はありません。文字列テンプレートを作成することの要点は、リスト内の項目を出力することです。

文字列の書式設定に関する何かが欠けていますか、それともこれは Python のバグのように思われますか?


解決

@mgilson は、ドキュメントで見逃した解決策を指摘しました。リンク

現在、値に対して str() を呼び出す '!s' と repr() を呼び出す '!r' の 2 つの変換フラグがサポートされています。

いくつかの例:

"Harold's a clever {0!s}"        # Calls str() on the argument first
"Bring out the holy {name!r}"    # Calls repr() on the argument first
4

3 に答える 3

1

これを試して:

print template.format(*map(str, l))
=>      2013-06-26 09:00:00       2013-06-26 09:00:00

datetime最初にオブジェクトを文字列に変換することで機能し、次にformatメソッドで問題なくフォーマットできます。

于 2013-06-28T15:48:07.603 に答える