2010-09-11 15 views
4

J'ai une liste de listes qui ressemble à quelque chose comme ceci:espace blanc écriture texte délimité pour être lisible en Python

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

J'écrire les informations dans un fichier comme celui-ci:

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

la sortie ressemble à ceci:

seq1 ACTAGACCCTAG 
sequence287653 ACTAGNACTGGG 
s9 ACTAGAAACTAG 

les colonnes ne sont pas alignées avec soin en raison de la variation de la longueur du premier élément de chaque liste interne. Comment puis-je écrire des quantités appropriées d'espaces entre les premier et second éléments pour aligner la deuxième colonne sur la lisibilité humaine?

+0

Un concept connexe intéressant: [YAML] (http://www.yaml.org/) – NullUserException

Répondre

10

Vous avez besoin d'une chaîne de format:

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

%-15s moyens Justifier à gauche un champ de 15 l'espace pour une chaîne. Voici le résultat:

seq1   ACTAGACCCTAG 
sequence287653 ACTAGNACTGGG 
s9    ACTAGAAACTAG 
+0

loin. relire le code – aaronasterling

+1

fonctionne parfaitement. Merci! – Jake

+0

Points bonus pour simplifier une boucle en décompressant les listes internes directement dans 'i' et' j'. –

0

"%10s" % obj assurera 10 places minimum avec la représentation de chaîne de obj aligné sur la droite.

"%-10s" % obj fait la même chose, mais s'aligne sur la gauche.

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)) 

pour moi est encore plus clair que l'expression avec boucle