-1

我导入了一个包含 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'但会产生相同的随机结果。
请帮忙。

4

3 回答 3

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
于 2012-05-01T06:06:44.403 回答
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  

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

于 2012-05-01T06:14:54.653 回答
0

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

鉴于您当前的输入 line/ 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()or将字符串转换为数字float(),然后使用适当的格式指令排列小数点,例如使用%7.4f浮点数和%4d整数(再次选择满足您需要的值)

于 2012-05-01T06:08:46.180 回答