it-swarm.com.de

Eine Python-Listenliste in eine CSV-Datei schreiben

Ich habe eine lange Liste von Listen des folgenden Formulars ---

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

die Werte in der Liste sind von unterschiedlichen Typen - float, int, strings. Wie schreibe ich sie in eine CSV-Datei, damit meine CSV-Datei so aussieht

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

Pythons eingebautes CSV-Modul kann dies problemlos handhaben:

import csv

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

Dies setzt voraus, dass Ihre Liste als a definiert ist, wie in Ihrer Frage. Sie können das genaue Format der Ausgabe-CSV über die verschiedenen optionalen Parameter zu csv.writer() anpassen, wie auf der oben verlinkten Bibliotheksreferenzseite dokumentiert.

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

offizielle Dokumente: http://docs.python.org/2/library/csv.html

25

Sie könnten pandas verwenden:

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

Die Verwendung von csv.writer in meiner sehr großen Liste hat ziemlich lange gedauert. Ich entschied mich für Pandas, es war schneller und einfacher zu kontrollieren und zu verstehen:

 import pandas

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

Der gute Teil, den Sie ändern können, um eine bessere CSV-Datei zu erstellen:

 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

Wenn Sie es aus irgendeinem Grund manuell tun wollten (ohne ein Modul wie csv, pandas, numpy usw.) zu verwenden:

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

Natürlich kann das Rollen Ihrer eigenen Version fehleranfällig und ineffizient sein. Deshalb gibt es normalerweise ein Modul dafür. Aber manchmal können Sie selbst schreiben, wie sie funktionieren, und manchmal ist es auch einfacher.

4
tegan

Die Lösung von Ambers funktioniert auch für numpy-Arrays:

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

Stellen Sie sicher, dass Sie beim Erstellen des Schreibers lineterinator='\n' angeben. Andernfalls könnte nach jeder Datenzeile eine zusätzliche leere Zeile in die Datei geschrieben werden, wenn Datenquellen aus anderen CSV-Dateien stammen ...

Hier ist meine Lösung:

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

Wie wäre es, wenn Sie die Liste in pickle ablegen und sie mit pickle module wiederherstellen? Das ist sehr praktisch. 

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

Wenn Sie das csv -Modul dafür nicht importieren möchten, können Sie eine Liste von Listen in eine CSV-Datei schreiben, indem Sie nur Python Built-Ins verwenden

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