2017-07-21 15 views
1

他のファイルから内容を取り出して解析しようとしています。リスト内の特定の要素のテキストを整列する方法python

だから私の列が解析した後、次のようになります。

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

はどうすればテキストはこのように見えるようにすることができます

編集:

が、それはこの形式を持つことが可能です。

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

各列の列の長さは、文字列の長さによって異なります。

私は.split('|')を使用して行をリストにすることができますが、どのようにして各列が特定の数のスペースを使用し、それをパスしないようにするかを知っています。ですから、例えば:列内の1つの要素が長すぎると、彼らがaligmentの外に常にある場合は、何らかの理由で列は常に、UNIXで整列していない得るので、これは、その後、Outlookの電子メールに、UNIXから送信されます

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

見通し。

答えて

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確かに。 10は単なる見積もりだった。私はOPが必要に応じて変更を加えると考えています。 –

+0

これは完璧ですが、データの最大数は6です。ピン名は15文字にすることができます。たとえば、15文字を使用してすべてを列として整列させる必要はありません。 列1は 800 | PIN_NAME_LONG | 800 |他のロングネーム| –

関連する問題