web-dev-qa-db-fra.com

Écrire une liste de listes Python dans un fichier csv

J'ai une longue liste de listes de la forme suivante ---

a = [[1.2,'abc',3],[1.2,'werew',4],........,[1.4,'qew',2]]

les valeurs de la liste sont de types différents - float, int, strings.Comment puis-je l'écrire dans un fichier csv afin que mon fichier de sortie csv ressemble à

1.2,abc,3
1.2,werew,4
.
.
.
1.4,qew,2
132
user1403483

Le module CSV intégré de Python peut gérer cela facilement:

import csv

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(a)

Cela suppose que votre liste est définie par a, comme dans votre question. Vous pouvez modifier le format exact du fichier CSV de sortie via les divers paramètres facultatifs sur csv.writer(), comme indiqué dans la page de référence de la bibliothèque liée ci-dessus.

242
Amber
import csv
with open(file_path, 'a') as outcsv:   
    #configure writer to write standard csv file
    writer = csv.writer(outcsv, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
    writer.writerow(['number', 'text', 'number'])
    for item in list:
        #Write item to outcsv
        writer.writerow([item[0], item[1], item[2]])

documents officiels: http://docs.python.org/2/library/csv.html

25
Dmitry Zagorulkin

Vous pouvez utiliser pandas:

In [1]: import pandas as pd

In [2]: a = [[1.2,'abc',3],[1.2,'werew',4],[1.4,'qew',2]]

In [3]: my_df = pd.DataFrame(a)

In [4]: my_df.to_csv('my_csv.csv', index=False, header=False)
23
Akavall

Utiliser csv.writer dans ma très grande liste a pris un certain temps. J'ai décidé d'utiliser des pandas, c'était plus rapide et plus facile à contrôler et à comprendre:

 import pandas

 yourlist = [[...],...,[...]]
 pd = pandas.DataFrame(yourlist)
 pd.to_csv("mylist.csv")

La bonne partie, vous pouvez changer quelque chose pour faire un meilleur fichier csv:

 yourlist = [[...],...,[...]]
 columns = ["abcd","bcde","cdef"] #a csv with 3 columns
 index = [i[0] for i in yourlist] #first element of every list in yourlist
 not_index_list = [i[1:] for i in yourlist]
 pd = pandas.DataFrame(not_index_list, columns = columns, index = index)

 #Now you have a csv with columns and index:
 pd.to_csv("mylist.csv")
5
Dinidiniz

Si, pour une raison quelconque, vous vouliez le faire manuellement (sans utiliser un module comme csv, pandas, numpy etc.):

with open('myfile.csv','w') as f:
    for sublist in mylist:
        for item in sublist:
            f.write(item + ',')
        f.write('\n')

Bien sûr, lancer votre propre version peut être source d’erreurs et inefficace ... c’est pourquoi il existe un module pour cela. Mais parfois, écrire le vôtre peut vous aider à comprendre comment ils fonctionnent et parfois c'est plus facile.

4
tegan

La solution Ambers fonctionne également bien pour les tableaux numpy:

from pylab import *
import csv

array_=arange(0,10,1)
list_=[array_,array_*2,array_*3]
with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(list_)
2
Semjon Mössinger

Assurez-vous d’indiquer lineterinator='\n' lors de la création du rédacteur; sinon, une ligne vide supplémentaire peut être écrite dans le fichier après chaque ligne de données lorsque les sources de données proviennent d'un autre fichier CSV ...

Voici ma solution:

with open('csvfile', 'a') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter='    ',quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
for i in range(0, len(data)):
    spamwriter.writerow(data[i])
0
yashi wang

Que diriez-vous de vider la liste de la liste et de la restaurer avec pickle module ? C'est assez pratique. 

>>> import pickle
>>> 
>>> mylist = [1, 'foo', 'bar', {1, 2, 3}, [ [1,4,2,6], [3,6,0,10]]]
>>> with open('mylist', 'wb') as f:
...     pickle.dump(mylist, f) 


>>> with open('mylist', 'rb') as f:
...      mylist = pickle.load(f)
>>> mylist
[1, 'foo', 'bar', {1, 2, 3}, [[1, 4, 2, 6], [3, 6, 0, 10]]]
>>> 
0
Good Will

Si vous ne souhaitez pas importer le module csv pour cela, vous pouvez écrire une liste de listes dans un fichier csv en utilisant uniquement Python Built-ins

with open("output.csv", "w") as f:
    for row in a:
        f.write("%s\n" % ','.join(str(col) for col in row))
0
yellow01