2015-09-06 89 views
0

我使用Python print()函數來打印組件名稱,其當前版本和最新版本如下:如何使文本行的特定部分正確縮進?

for component in component_list: 

print("%s \t current ver: %s \t latest ver: %s" % (name, current_version, latest_version)) 

組件名稱可以在它的長度,這使得句子部分不正確縮進不同。

bla  current ver: 0x05 latest ver: 0x05 


blabla1  current ver: 0x06 latest ver: 0x06 


blablablabla  current ver: 0x08 latest ver: 0x0e 

我怎樣才能使印刷到如下:

bla    current ver: 0x05 latest ver: 0x05 


blabla1   current ver: 0x06 latest ver: 0x06 


blablablabla  current ver: 0x08 latest ver: 0x0e 

感謝,

+0

'「%20s」%string'會將字符串間隔超過20個字符,即使該字符串少於20個字符。 – Evert

+0

仔細閱讀[格式規範迷你語言](https://docs.python.org/3/library/string.html#format-specification-mini-language)。也許不是最容易閱讀的,但它包含了所有的信息。它主要使用較新的大括號格式,但這並不重要,因爲大多數示例都可以輕鬆轉換爲百分比樣式的格式。 – Evert

回答

2

如果maxLength是名字的清單中的最大長度,例如:

# I don't know how you extract name from component so this might be incorrect 
maxLength = max(len(component.name) for component in component_list) 

然後你可以使用以下方法來正確地格式化代碼:

print("{:{width}} \t current ver: {} \t latest ver: {}".format(
    name, current_version, latest_version, width = maxLength) 
) 

說明:

>>> '{:<20}'.format('Hello World!') # Add spaces to the right to reach 20 characters 
'Hello World!  ' 
>>> '{:>20}'.format('Hello World!') # Add spaces to the left 
'  Hello World!' 
>>> '{:20}'.format('Hello World!') # Use default alignment for the type of object 
'Hello World!  ' # For string it is left aligned 

然後,而不是使用原始20,您可以用另一個變量指定寬度:

>>> '{:<{width}}'.format('Hello World!', width = 20) 
'Hello World!  ' 

檢查str.format文檔的格式化規範的迷你語言的完整文檔。

+0

對齊規範'例如{:<20}'指定對齊字段的寬度和寬度。 –

+0

工程就像一個魅力!謝謝。 – Qwerty

0
  • 遍歷所有的列表中找到左邊組件
  • 使用的最大長度此值(例如,將其舍入到下一個4個字符)確定第二個組件的起始列(如n
  • 再次
  • 遍歷列表,此時印刷第一部分,(n-len(first_component))空間,那麼第二個組件
+0

爲什麼downvote? –

+0

這是一個非標準答案,當然,但不贊成downvote。無論如何,標準的答案是使用'str.format()'。 – zxq9