1

文字列とフロートの両方を要素として含むリストがいくつかあります。

import numpy as num

COLUMN_1 = ['KIC 7742534', 'Variable Star of RR Lyr type' , 'V* V368 Lyr',
        'KIC 7742534', '4.0', '0.4564816']

COLUMN_2 = ['KIC 76', 'Variable Star' , 'V* V33 Lyr',
        'KIC 76', '5.0', '0.45']

DAT = num.column_stack((COLUMN_1, COLUMN_2))
num.savetxt('SAVETXT.txt', DAT, delimiter=' ', fmt='{:^10}'.format('%s'))

このファイルを実行したときに得られる出力は次のとおりです。

KIC 7742534    ,    KIC 76    
Variable Star of RR Lyr type    ,    Variable Star    
V* V368 Lyr    ,    V* V33 Lyr    
KIC 7742534    ,    KIC 76    
4.0    ,    5.0    
0.4564816    ,    0.45     

理想的な出力は次のようになります (整列されたヘッダーを含む)

#ELEMENT1                            ELEMENT2
KIC 7742534                     ,    KIC 76    
Variable Star of RR Lyr type    ,    Variable Star    
V* V368 Lyr                     ,    V* V33 Lyr    
KIC 7742534                     ,    KIC 76    
4.0                             ,    5.0    
0.4564816                       ,    0.45   

文字列に最大幅が定義されていない場合、どうすればこのような出力を取得できますか (ヘッダーが整列されています)。文字列 (fmt) の形式を変更しようとしましたが、今のところうまくいきません。

-ありがとう!

4

1 に答える 1

2

出力 (または見方によっては入力) の最長の行の最大文字列長を計算する必要があります。これは次のような方法です。

max_len = max(max(map(len,l)) for l in zip(COLUMN_1,COLUMN_2))

達成します。その後、fmtmax_len の値に基づいてパラメーターを動的に変更する必要があります。これは次のように行うことができます。

fmt=('{:^%d}' % max_len).format('%s')

次の非 numpy の例は、予想される出力を示しています。

with open('ofile.txt','w+') as f:
    max_len = max(max(map(len,l)) for l in zip(COLUMN_1,COLUMN_2))
    for line in zip(COLUMN_1,COLUMN_2):
        f.write(','.join(('{:<%s}' % (max_len)).format(e) for e in line)+'\n')

ofile.txt以下を含むテキスト ファイルを生成します。

KIC 7742534                 ,KIC 76                      
Variable Star of RR Lyr type,Variable Star               
V* V368 Lyr                 ,V* V33 Lyr                  
KIC 7742534                 ,KIC 76                      
4.0                         ,5.0                         
0.4564816                   ,0.45          
于 2013-05-19T07:37:57.227 に答える