web-dev-qa-db-fra.com

Écrire des listes Python dans des colonnes en csv

J'ai 5 listes, toutes de la même longueur, et j'aimerais les écrire sur 5 colonnes dans un fichier CSV. Jusqu'à présent, je ne peux en écrire qu'un dans une colonne avec ce code:

with open('test.csv', 'wb') as f:
    writer = csv.writer(f)
    for val in test_list:
        writer.writerow([val])

Si j'ajoute une autre boucle for, il écrit simplement cette liste dans la même colonne. Quelqu'un connaît un bon moyen d'obtenir cinq colonnes séparées?

25
Alex Chumbley

les changer en rangées

rows = Zip(list1,list2,list3,list4,list5)

alors juste 

import csv

with open(newfilePath, "w") as f:
    writer = csv.writer(f)
    for row in rows:
        writer.writerow(row)
31
Joran Beasley

Le code suivant écrit des listes python dans des colonnes en csv

import csv
from itertools import Zip_longest
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['f', 'g', 'i', 'j']
d = [list1, list2]
export_data = Zip_longest(*d, fillvalue = '')
with open('numbers.csv', 'w', encoding="ISO-8859-1", newline='') as myfile:
      wr = csv.writer(myfile)
      wr.writerow(("List1", "List2"))
      wr.writerows(export_data)
myfile.close()

La sortie ressemble à ceci 

 enter image description here

9

Vous pouvez utiliser izip pour combiner vos listes, puis les parcourir

for val in itertools.izip(l1,l2,l3,l4,l5):
    writer.writerow(val)
4
jh314
import csv
dic = {firstcol,secondcol} #dictionary
csv = open('result.csv', "w") 
for key in dic.keys():
    row ="\n"+ str(key) + "," + str(dic[key]) 
    csv.write(row)
0
Shb8086

Si vous préférez utiliser une bibliothèque tierce, vous pouvez le faire avec les pandas. Les avantages incluent un accès transparent à des méthodes spécialisées et un étiquetage des lignes/colonnes:

import pandas as pd

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

df = pd.DataFrame(list(Zip(*[list1, list2, list3]))).add_prefix('Col')

df.to_csv('file.csv', index=False)

print(df)

   Col0  Col1  Col2
0     1     4     7
1     2     5     8
2     3     6     9
0
jpp

Je ne voulais rien importer d'autre que csv, et toutes mes listes contiennent le même nombre d'éléments. La meilleure réponse semble ici faire des listes une ligne chacune, au lieu d’une colonne chacune. Ainsi, j'ai pris les réponses ici et suis venu avec ceci:

import csv
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['f', 'g', 'i', 'j','k']
with open('C:/test/numbers.csv', 'wb+') as myfile:
    wr = csv.writer(myfile)
    wr.writerow(("list1", "list2"))
    rcount = 0
    for row in list1:
        wr.writerow((list1[rcount], list2[rcount]))
        rcount = rcount + 1
    myfile.close()
0
Bartats