我导入了一个包含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'
,但产生了相同的随机结果
请帮忙。
答案 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
用于您的整数(再次,选择符合您需求的值)