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))

将实现。之后,您需要fmt根据 max_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 回答