2010-08-10 6 views
0

J'utilise le code ci-dessous pour écrire dans un fichier mais pour le moment il écrit tout sur une nouvelle ligne.Python: Problème simple de formatage de fichier

import csv 
antigens = csv.reader(open('PAD_n1372.csv'), delimiter=',') 

lista = [] 
pad_file = open('pad.txt','w') 

for i in antigens: 
    lista.append(i[16]) 
    lista.append(i[21]) 
    lista.append(i[0]) 

for k in lista: 
    pad_file.write(k+',') 
    pad_file.write('\n') 

Si dire mon « lista » ressemble

[['apple','car','red'],['orange','boat','black']] 

Je voudrais que la sortie dans mon fichier texte à:

apple,car,red 
orange,boat,black 

Je sais que mon caractère de nouvelle ligne est dans la mauvais endroit mais je sais maintenant où le placer, comment pourrais-je enlever la virgule de la fin de chaque ligne?


EDIT

Désolé mon "lista" ressemble

[ 'pomme', 'voiture', 'rouge', 'orange', 'bateau', 'noir']

Répondre

1

Si lista est [['apple','car','red'],['orange','boat','black']], alors chaque k dans votre boucle sera l'une des sous-listes, donc tout ce que vous devez faire est de joindre les éléments de cette sous-liste sur un , et de le sortir en une seule ligne:

for k in lista: 
    pad_file.write(','.join(k)) 
    pad_file.write('\n') 

Modifier en fonction des commentaires: Si lista est ['apple, 'car', 'red', 'orange', 'boat', 'black'] et que vous souhaitez 3 éléments par ligne, vous pouvez simplement changer la cible for à une compréhension de la liste qui renvoie les sous-listes appropriées:

for k in [lista[x:x+3] for x in xrange(0, len(lista), 3)]: 
    pad_file.write(','.join(k)) 
    pad_file.write('\n') 

Il existe d'autres moyens de diviser une liste en blocs; voir this SO question

+0

désolé, je fait une erreur dans le formate de mon lista – Phil

+0

@Phil Comment vous décidez combien les éléments sont sur chaque ligne alors? Est-ce juste fixé à 3? –

+0

Oui, il est fixé à 3 – Phil

0

Il semble que vous traitez un fichier csv d'entrée avec plus de 22 colonnes. Pourquoi ne pas simplement utiliser csv.writer pour réécrire chaque ligne?

Un court exemple de travail:

import csv 

# generate an input file 
f = open('in.csv','w') 
f.write('''\ 
Col1,Col2,Col3,Col4,Col5 
1,2,3,4,5 
6,7,8,9,10 
11,12,13,14,15 
''') 
f.close() 

# open the files (csv likes binary mode) 
input = open('in.csv','rb') 
output = open('out.csv','wb') 

antigens = csv.reader(input) 
pad_file = csv.writer(output) 

for i in antigens: 
    pad_file.writerow([i[4],i[2],i[0]]) 

input.close() 
output.close() 

"out.csv" contient:

Col5,Col3,Col1 
5,3,1 
10,8,6 
15,13,11