2017-07-21 56 views
1

ok我試圖從另一個文件中獲取內容並解析它們。如何對齊列表中特定元素的文本python

所以,我的專欄是這樣解析後:

Data| Pin | Time | Delay | 
800 | address | 15 | 23 

我怎樣才能讓文字是這樣的:

編輯:

是有可能有這樣的格式:

Data |  Pin  | Time | Delay | 
800 | LONG PIN NAME | 16 | 15 | 

根據字符串的長度,每列對齊應該不同。

我知道我可以使用.split('|')將行變成一個列表,但是如何使它成爲每列使用特定數量的空格並且不會傳遞該行。因此,例如:

for lines in file: 
    #align lines 
    #write lines. align to new file 

這將隨後從UNIX發送到Outlook電子郵件,所以出於某種原因列總是不對齊在UNIX中,如果一列中一個元素過長,他們總是出aligment的外表。

回答

2

您可以使用str.format,並指定一個理由:

In [199]: lines = '''Data| Pin | Time | Delay | 
    ...: 800 | address | 15 | 23 |'''.splitlines() 

In [200]: for line in lines: 
    ...:  print('|'.join(['{:^10}'.format(x) for x in map(str.strip, line.split('|'))]) 
    ...:) 
    ...:  
    Data | Pin | Time | Delay |   
    800 | address | 15 | 23 |  

您需要首先分割上|,然後剝去每個項目去除多餘的空白。然後,您可以再次應用格式並加入|

不要混合標籤和空格。


對於可變間距,您可以創建一個間隔列表,並把它傳遞給裏面的字符串,像這樣:

spacing = [10, 20, 8, 8] 

for line in lines: 
    print('|'.join([('{:^%d}' %sp).format(x) for sp, x in zip(spacing, map(str.strip, line.split('|')))])) 

    Data |  Pin   | Time | Delay 
    800 |  address  | 15 | 23 
+0

的''' '{:^ 10}''''需要寬度足以容納正在打印的最長的字符串。 - [格式字符串語法](https://docs.python.org/3/library/string.html#format-string-syntax) – wwii

+0

@wwii確實。這只是一個估計。我假設OP會根據需要進行更改。 –

+0

這是完美的,但例如數據最多有6個數字,引腳名稱可能爲15個字符有沒有辦法不必使用15個字符來將它們全部對齊爲例如 第一列可能是 800 | PIN_NAME_LONG | 800 |另一個長名| –

相關問題