2010-09-11 50 views
4

我有一个列表的列表,看起来是这样的:写作空格分隔的文本是人类可读的Python

data = [['seq1', 'ACTAGACCCTAG'], 
     ['sequence287653', 'ACTAGNACTGGG'], 
     ['s9', 'ACTAGAAACTAG']] 

我写的信息,像这样的文件:

for i in data: 
    for j in i: 
     file.write('\t') 
     file.write(j) 
    file.write('\n') 

输出看起来是这样的:

seq1 ACTAGACCCTAG 
sequence287653 ACTAGNACTGGG 
s9 ACTAGAAACTAG 

列不长线路整齐,因为变化了每个内部列表中的第一个元素。如何在第一个和第二个元素之间编写适当数量的空白字符,以使第二个字段为了人类可读性而排队?

+0

一个有趣的相关概念更加清晰:YAML(http://www.yaml.org/) – NullUserException 2010-09-11 05:44:02

回答

10

你需要一个格式字符串:

for i,j in data: 
    file.write('%-15s %s\n' % (i,j)) 

%-15s手段左对齐15航天领域的一个字符串。下面是输出:

seq1   ACTAGACCCTAG 
sequence287653 ACTAGNACTGGG 
s9    ACTAGAAACTAG 
+0

关方式。重读代码 – aaronasterling 2010-09-11 05:42:47

+1

完美的作品。谢谢! – Jake 2010-09-11 05:49:27

+0

通过将内部列表直接解包为'i'和'j'来简化一个循环的加分点。 – 2010-09-11 06:04:38

0

"%10s" % obj将确保最小的10位与右侧对齐obj的字符串表示。

"%-10s" % obj也是如此,但与左边对齐。

1
data = [['seq1', 'ACTAGACCCTAG'], 
     ['sequence287653', 'ACTAGNACTGGG'], 
     ['s9', 'ACTAGAAACTAG']] 
with open('myfile.txt', 'w') as file: 
    file.write('\n'.join('%-15s %s' % (i,j) for i,j in data)) 

对我来说甚至比表达循环

相关问题