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 (?), Das heißt, sie sehen ungefähr so aus
[u'value 1', u'value 2', ...]
Wenn ich die Werte in der Liste durchlaufe, for v in mylist: print v
scheinen sie nur Text zu sein.
Und ich kann mit ,
jedem ein Zwischen setzenprint ','.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, z
"value 1", "value 2", ...
Ich kann keine einfache Möglichkeit finden, die Trennzeichen in die Formatierung einzubeziehen, z. B. habe ich die join
Anweisung durchgearbeitet. Wie kann ich das machen?
Antworten:
Bearbeiten: Dies funktioniert nur mit Python 2.x.
Damit es mit Python 3.x funktioniert, ersetzen Sie es
wb
durchw
( siehe diese SO-Antwort ).quelle
csv
Modul in 2.x nicht ordnungsgemäß mit Unicodes umgeht. Beispiele zum Umgang damit finden Sie in der Moduldokumentation. docs.python.org/library/csv.htmlTypeError: 'str' does not support the buffer interface
.Hier ist eine sichere Version von Alex Martelli:
quelle
with
, um sicherzustellen, dass die Datei geschlossen ist, wenn fertigwr.writerow(my_list)
innerhalb der Schleife zu haben?Für einen anderen Ansatz können Sie DataFrame in Pandas verwenden : Und es kann die Daten einfach wie im folgenden Code auf csv sichern :
quelle
Die beste Option, die ich gefunden habe, war die Verwendung von
savetxt
desnumpy
Moduls :Falls Sie mehrere Listen haben, die gestapelt werden müssen
quelle
Verwenden Sie Pythons
csv
Modul zum Lesen und Schreiben von durch Kommas oder Tabulatoren getrennten Dateien. Das CSV-Modul wird bevorzugt, da es Ihnen eine gute Kontrolle über das Zitieren gibt.Hier ist zum Beispiel das Beispiel für Sie:
Produziert:
quelle
out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL))
Füllt die Daten, unabhängig davon, ob Sieopen("myfile.csv","w")
eine neue Datei oder eine neue Dateiopen("myfile2.csv","w")
einfügen. Es scheint, als ob das out-Objekt das auf dem Lauf erstellte Dateiobjekt nicht verarbeiten kann, sondern den Ausgabeprozess als Aufgabe speichert. Mit anderen Worten: Das out-Objekt speichert das Dateiobjekt im ersten Durchlauf, schreibt jedoch nur, wenn das Dateiobjekt bereits vorhanden ist! Siehe die richtige Lösung unten @Saurabh AdhikaryIn diesem Fall können Sie die Methode string.join verwenden.
Aus Gründen der Übersichtlichkeit auf einige Zeilen aufgeteilt - hier ist eine interaktive Sitzung
Oder als einzelne Zeile
Möglicherweise haben Sie jedoch ein Problem, da Ihre Zeichenfolgen in Anführungszeichen eingebettet sind. Wenn dies der Fall ist, müssen Sie entscheiden, wie Sie ihnen entkommen können.
Das CSV-Modul kann all dies für Sie erledigen, sodass Sie zwischen verschiedenen Anführungszeichenoptionen (alle Felder, nur Felder mit Anführungszeichen und Trennzeichen, nur nicht numerische Felder usw.) und der Steuerung von Steuerzeichen (doppelte Anführungszeichen oder) wählen können entkommene Zeichenfolgen). Wenn Ihre Werte einfach sind, ist string.join wahrscheinlich in Ordnung. Wenn Sie jedoch viele Randfälle verwalten müssen, verwenden Sie das verfügbare Modul.
quelle
Diese Lösung klingt verrückt, funktioniert aber reibungslos wie Honig
Die Datei wird von csvwriter geschrieben, daher werden die csv-Eigenschaften beibehalten, dh durch Kommas getrennt. Das Trennzeichen hilft im Hauptteil, indem Listenelemente jedes Mal in die nächste Zeile verschoben werden.
quelle
data = [["value %d" % i, "value %d" % (i+1)] for i in range(1,4)] with open("myfile.txt","w") as f: out = csv.writer(f, quoting=csv.QUOTE_ALL, delimiter='\n') out.writerow([';'.join(x) for x in data])
Erstellen und Schreiben in eine CSV-Datei
Das folgende Beispiel zeigt das Erstellen und Schreiben einer CSV-Datei. Um einen dynamischen Dateischreiber zu erstellen, müssen wir eine Paketimport- CSV importieren und dann eine Instanz der Datei mit dem Dateiverweis erstellen. Beispiel: - mit open ("D: \ sample.csv", "w", newline = "" ) als file_writer
Wenn die Datei mit dem genannten Dateiverzeichnis nicht vorhanden ist, erstellt Python dieselbe Datei im angegebenen Verzeichnis. "w" steht für "Schreiben". Wenn Sie eine Datei lesen möchten, ersetzen Sie "w" durch "r" oder fügen Sie sie hinzu zu vorhandener Datei dann "a". newline = "" gibt an, dass bei jedem Erstellen einer Zeile eine zusätzliche leere Zeile entfernt wird. Um leere Zeilen zu entfernen, verwenden wir newline = "". Erstellen Sie einige Feldnamen (Spaltennamen) mit list like fields = ["Names", "Age "," Class "] , dann auf Writer-Instanz wie writer = csv.DictWriter (file_writer, fieldnames = fields) anwenden, hier Dictionary-Writer verwenden und Spaltennamen zuweisen, um Spaltennamen in csv zu schreiben, verwenden wir writer. Während das Schreiben von Dateiwerten mithilfe der Wörterbuchmethode übergeben werden muss, ist hier der Schlüssel der Spaltenname und der Wert Ihr jeweiliger Schlüsselwert
quelle
Jupyter Notizbuch
Nehmen wir an, Ihre Liste ist
A
Dann können Sie die folgende Anzeige codieren, die Sie als CSV-Datei haben (nur Spalten!)
quelle
Sie sollten das CSV-Modul auf jeden Fall verwenden, aber es besteht die Möglichkeit, dass Sie Unicode schreiben müssen. Für diejenigen, die Unicode schreiben müssen, ist dies die Klasse von der Beispielseite, die Sie als util-Modul verwenden können:
quelle
Hier ist eine andere Lösung, für die das
csv
Modul nicht erforderlich ist .Beispiel:
Wenn die anfängliche Liste jedoch einige enthält, werden sie nicht maskiert. Wenn dies erforderlich ist, können Sie eine Funktion aufrufen, um sie wie folgt zu maskieren:
quelle