Erstellen Sie eine CSV-Datei mit Werten aus einer Python-Liste


4 Answers

Hier ist eine sichere Version von Alex Martelli:

import csv

with open('filename', 'wb') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    wr.writerow(mylist)
Question

Ich versuche, eine CSV-Datei mit den Werten aus einer Python-Liste zu erstellen. Wenn ich die Werte in der Liste drucke, sind sie alle Unicode (?), Dh sie sehen ungefähr so ​​aus

[u'value 1', u'value 2', ...]

Wenn ich die Werte in der Liste for v in mylist: print v dh for v in mylist: print v scheinen sie for v in mylist: print v Text zu sein.

Und ich kann ein , zwischen jedem mit print ','.join(mylist)

Und ich kann in eine Datei ausgeben, dh

myfile = open(...)
print >>myfile, ','.join(mylist)

Aber ich möchte in eine CSV ausgeben und Trennzeichen um die Werte in der Liste haben

"value 1", "value 2", ... 

Ich finde keine einfache Möglichkeit, die Trennzeichen in die Formatierung einzufügen, zB habe ich die join Anweisung durchprobiert. Wie kann ich das machen?




Hier ist eine andere Lösung, die das csv Modul nicht benötigt.

print ', '.join(['"'+i+'"' for i in myList])

Beispiel:

>>> myList = [u'value 1', u'value 2', u'value 3']
>>> print ', '.join(['"'+i+'"' for i in myList])
"value 1", "value 2", "value 3"

Wenn jedoch die ursprüngliche Liste einige enthält, werden sie nicht maskiert. Wenn es erforderlich ist, ist es möglich, eine Funktion aufzurufen, um so zu entkommen:

print ', '.join(['"'+myFunction(i)+'"' for i in myList])



Jupyter Notizbuch

Sagen wir, deine Liste ist A

Dann können Sie die folgende Anzeige codieren, die Sie als CSV-Datei haben werden (nur Spalten!)

R="\n".join(A)
f = open('Columns.csv','w')
f.write(R)
f.close()



Die beste Option, die ich gefunden habe, war die Verwendung von savetxt aus dem numpy Modul :

import numpy as np
np.savetxt("file_name.csv", data1, delimiter=",", fmt='%s', header=header)

Falls Sie mehrere Listen haben, die gestapelt werden müssen

np.savetxt("file_name.csv", np.column_stack((data1, data2)), delimiter=",", fmt='%s', header=header)



Sie könnten in diesem Fall die Methode string.join verwenden.

Teilen Sie einige Zeilen zur besseren Übersicht auf - hier ist eine interaktive Sitzung

>>> a = ['a','b','c']
>>> first = '", "'.join(a)
>>> second = '"%s"' % first
>>> print second
"a", "b", "c"

Oder als einzelne Zeile

>>> print ('"%s"') % '", "'.join(a)
"a", "b", "c"

Sie haben jedoch möglicherweise ein Problem, wenn Ihre Strings eingebettete Anführungszeichen enthalten. Wenn dies der Fall ist, müssen Sie entscheiden, wie Sie ihnen entkommen können.

Das docs.python.org/library/csv.html kann all dies für Sie erledigen, so dass Sie zwischen verschiedenen Anführungsoptionen wählen können (alle Felder, nur Felder mit Anführungszeichen und Trennzeichen, nur nicht numerische Felder usw.) und wie Sie die Steuerzeichen (doppelte Anführungszeichen oder Escape-Strings). Wenn Ihre Werte einfach sind, ist string.join wahrscheinlich in Ordnung, aber wenn Sie viele Randfälle verwalten müssen, verwenden Sie das verfügbare Modul.




Related