2015-11-26 63 views
2

我需要將數據作爲表格寫入文本文件。有點像數據庫。頭部有司機,汽車,團隊,網格,最快的圈速,比賽時間和點數。當我嘗試寫入下面的數據時,不要排隊。由於一些司機的名字比別人長。Python中的Tabbing?

它看起來有點像這樣:

|  Driver  | 
|Sebastian William| 
|Tom Hamilton | 

的名字只有2實際上與頭對齊。我只是試圖解決與驅動程序的問題,現在一旦我知道我應該能夠得到所有其他標題排隊。

在字典數組中使用for循環,我將x設置爲等於驅動程序名稱的len,22是最長名稱(18)的長度加上幾個空格。

TextFile.write((items['Driver']+'\t|').expandtabs(22-x)) 

任何讓他們排隊的方法?

回答

4

你可以使用format string syntax

>>> "|{:22}|".format("Niki Lauda") 
'|Niki Lauda   |' 

您還可以更改排列:

>>> "|{:>22}|".format("Niki Lauda") 
'|   Niki Lauda|' 
>>> "|{:^22}|".format("Niki Lauda") 
'|  Niki Lauda  |' 

,如果你想與你的列尺寸更大的靈活性,可以參數化,作爲得好:

>>> "|{:^{}}|".format("Niki Lauda", 24) 
'|  Niki Lauda  |' 
+2

有用的參考例子:https://pyformat.info/ –

+0

我不知道你可以嵌套領域。它可能會混淆長格式字符串。我想我會在這種情況下使用字段名稱。 –

+0

在[格式字符串語法文檔](https://docs.python.org/3/library/string.html#format-string-syntax)末尾提到了字段嵌套,並在[示例] (https://docs.python.org/3/library/string.html#format-examples)。 –

2

在Tim提供的答案之上,您可以選擇使用Tabulate這是非常容易使用和定製。

table = [["spam",42],["eggs",451],["bacon",0]] 
headers = ["item", "qty"] 
print tabulate(table, headers, tablefmt="grid") 

+--------+-------+ 
| item | qty | 
+========+=======+ 
| spam | 42 | 
+--------+-------+ 
| eggs | 451 | 
+--------+-------+ 
| bacon |  0 | 
+--------+-------+ 

這也支持多種不同的數據庫風格。我更喜歡這樣簡單地使用格式,因爲它允許我通過配置tablefmt參數來完全更改輸出樣式。