2012-07-27 168 views
1

我想格式化一些輸出,我在屏幕上打印。這裏是我的代碼:Python str.format()方法不按預期工作

someString = someList[someIndex] + '{0:<8}'.format('\t') + someList[someOtherIndex] 
print someString 

我的預期輸出:

 
abcdefghi    someOutput 
abcde     someOtherOutput 

**OR** 
abcdefghi  someOutput 
abcde   someOtherOutput 

實際輸出我得到:

 
abcdefghi    someOutput 
abcde   someOtherOutput 

問題1:爲什麼我沒有得到預期的輸出?具體而言,爲什麼第二列中的條目錯位?
Q.2:我應該在代碼中更改哪些內容才能獲得預期輸出?

附加信息:我正在使用Python 2.6

感謝任何幫助。

+0

meh我只是會做一些類似於'print'%-16s%s「%(」abcde「,」someOutput「)'...即使%格式被折舊了......它會在一段時間內出現 – 2012-07-27 18:29:50

+2

但是爲什麼不學會使用推薦的str.format()? – NGambit 2012-07-27 18:33:19

+0

我確定我會在需要時(例如,使用一種版本的python警告說這種方法的折舊或不再支持它的版本...它看起來不太硬..我只是喜歡舊版本更好,並會繼續使用它們,只要我使用支持它們的python – 2012-07-27 18:38:04

回答

5

您必須申請「填滿」上打印的第一個字符串,使得它「推」始終是第二個在同一點:

someString = '{0:<16}{1}'.format(someList[someIndex], someList[someOtherIndex]) 

確保您所需要的填充較大不過,要打印最長的第一個單詞。

你之前做的只是打印第一個單詞,然後用填充(總是相同的)打印'\ t',最後打印第二個單詞。

+0

謝謝。是否有一個很好的在線資源,可以用例子詳細解釋所有這些內容?我查看了一些Python文檔,但沒有包含任何示例。 – NGambit 2012-07-27 19:06:40

+0

我很抱歉,文檔儘可能詳細(http://docs.python.org/library/string.html#format-examples)。但對於這些示例,您必須打開一個終端並嘗試一下,這是學習的最佳方式。 – Wookai 2012-07-27 19:22:18