xlrd anhängen - Erstellen Sie eine CSV-Datei mit Werten aus einer Python-Liste





öffnen schreiben (9)


Verwenden Sie das csv Modul von Python zum Lesen und Schreiben von durch Komma oder Tabulatoren getrennten Dateien. Das csv-Modul wird bevorzugt, weil es Ihnen eine gute Kontrolle über das Angebot gibt.

Zum Beispiel, hier ist das bearbeitete Beispiel für Sie:

import csv
data = ["value %d" % i for i in range(1,4)]

out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL)
out.writerow(data)

Produziert:

"value 1","value 2","value 3"

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?




import csv

with open("file.csv", 'w') as myfile:
     wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
     wr.writerow(mylist)



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



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.




Für eine andere Herangehensweise können Sie DataFrame in pandas : Und es kann einfach die Daten wie im folgenden Code an csv DataFrame :

import pandas
df = pandas.DataFrame(data={"col1": list_1, "col2": list_2})
df.to_csv("./file.csv", sep=',',index=False)



import csv

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



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)



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



Sie können den Operator + , um sie zu kombinieren:

listone = [1,2,3]
listtwo = [4,5,6]

mergedlist = listone + listtwo

Ausgabe:

>>> mergedlist
[1,2,3,4,5,6]




python csv xlrd