2010-09-11 72 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)) 

對我來說甚至比表達循環

相關問題