在python中将列条目写在另一个下面

时间:2012-05-01 05:52:04

标签: python

我导入了一个包含8列的文件,每列以'\t'分隔,因此在导入过程中,所有'\t'都会被'space'替换,而'\n'会被拆分以进行索引编制对我来说更容易然后从输入文件生成列表以供进一步分析。但经过分析后我得到了

lst =  ['PAIR', '1MFK', 'URANIUM', '82', 'HELIUM', '112', 3.6997']

有点列表,所以我把

final = '    '.join(lst)   

获取PAIR 1MFK 1 URANIUM 82 HELIUM 112 3.6997之类的值 但是,当我打印所有值时,它如下所示

PAIR 1MFK 1 URANIUM 82 HELIUM 112 3.6997  
PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003  
PAIR 345G 3 SODIUM 23 CARBON 14 1.664  
PAIR 4IG5 4 LITHIUM 82 ARGON 99 2.5506 

这里的列条目不仅仅位于另一个下方,但缩进对所有人来说都是相同的。

我尝试了'\t',但产生了相同的随机结果 请帮忙。

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以做这样简单的事情......

>>> s = '''PAIR 1MFK 1 URANIUM 82 HELIUM 112 3.6997  
... PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003  
... PAIR 345G 3 SODIUM 23 CARBON 14 1.664  
... PAIR 4IG5 4 LITHIUM 82 ARGON 99 2.5506'''
>>> ll = [x.split() for x in s.split('\n')]
>>> for row in ll:
...   print ''.join(x.ljust(10) for x in row)
... 
PAIR      1MFK      1         URANIUM   82        HELIUM    112       3.6997    
PAIR      2JGH      2         PLUTONIUM 98        POTASSIUM 88        5.3003    
PAIR      345G      3         SODIUM    23        CARBON    14        1.664     
PAIR      4IG5      4         LITHIUM   82        ARGON     99        2.5506    

这里我使用的固定列宽为10个字符。如果您愿意,可以通过预先计算适当的列宽来使其稍微复杂一些。

>>> column_widths = [max(len(x) for x in l) for l in zip(*ll)]
>>> for row in ll:
...   print '  '.join(x.ljust(w) for x,w in zip(row, column_widths))
... 
PAIR  1MFK  1  URANIUM    82  HELIUM     112  3.6997
PAIR  2JGH  2  PLUTONIUM  98  POTASSIUM  88   5.3003
PAIR  345G  3  SODIUM     23  CARBON     14   1.664 
PAIR  4IG5  4  LITHIUM    82  ARGON      99   2.5506

答案 1 :(得分:1)

如果您没有太多多个列表,您可以执行以下操作:

lst1 =  ['PAIR','1MFK','1','URANIUM','82','HELIUM','112','3.6997']
lst2 = 'PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003'.split(' ')
lst3 = 'PAIR 345G 3 SODIUM 23 CARBON 14 1.664'.split(' ')
lst4 = 'PAIR 4IG5 4 LITHIUM 82 ARGON 99 2.5506'.split(' ')
lsts = [lst1, lst2, lst3, lst4]
sizes = [max(len(item) for item in l) + 2 for l in zip(*lsts)]
for lst in lsts:
    print "".join(word.ljust(sizes[i]) for i, word in enumerate(lst))

<强>输出

PAIR  1MFK  1  URANIUM    82  HELIUM     112  3.6997  
PAIR  2JGH  2  PLUTONIUM  98  POTASSIUM  88   5.3003  
PAIR  345G  3  SODIUM     23  CARBON     14   1.664   
PAIR  4IG5  4  LITHIUM    82  ARGON      99   2.5506  

这种方法的好处是你不必猜测你需要填多少。

答案 2 :(得分:0)

我假设每行输入都成为一个列表(lst)进行处理。在处理循环中,您可以使用带有print的格式化指令来排列输出。

鉴于您当前的输入行/ lst

lst =  ['PAIR', '1MFK', 'URANIUM', '82', 'HELIUM', '112', '3.6997']
final = ' '.join(lst)

然后:

print('%8s %8s %10s %4s %10s %5s %10s' % (tuple(final.split())))

您可以根据需要调整字段宽度。

如果需要数字排队,可以通过int()float()将字符串转换为数字,然后使用适当的格式化指令排列小数点,例如使用{{1}对于您的浮点数,%7.4f用于您的整数(再次,选择符合您需求的值)