Ich habe eine Liste von Wörterbüchern, die ungefähr so aussieht:
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
Was soll ich tun, um dies in eine CSV-Datei zu konvertieren, die ungefähr so aussieht:
name,age,weight
bob,25,200
jim,31,180
python
csv
dictionary
data-conversion
backus
quelle
quelle
Antworten:
EDIT: Meine vorherige Lösung behandelt die Bestellung nicht. Wie von Wilduck bemerkt, ist DictWriter hier besser geeignet.
quelle
with open('people.csv', 'wb') as f: ...
dict_writer.writeheader()
anstelle vondict_writer.writer.writerow(keys)
open('people.csv', 'w')
set().union(*(d.keys() for d in mylist))
um alle Schlüssel in der Liste zu bekommen (wenn Sie einige haben, die nicht alle Schlüssel haben.)Dies ist, wenn Sie eine Wörterbuchliste haben:
quelle
In Python 3 sind die Dinge etwas anders, aber viel einfacher und weniger fehleranfällig. Es ist eine gute Idee, der CSV mitzuteilen, dass Ihre Datei mit
utf8
Codierung geöffnet werden soll , da diese Daten dadurch für andere portabler werden (vorausgesetzt, Sie verwenden keine restriktivere Codierung, wie z. B.latin1
).csv
in Python 3 dernewline=''
Parameter benötigt wird, andernfalls erhalten Sie beim Öffnen in Excel / Opencalc leere Zeilen in Ihrer CSV.Alternativ: Ich bevorzuge die Verwendung gegenüber dem CSV-Handler im
pandas
Modul. Ich finde, es ist toleranter gegenüber Codierungsproblemen, und Pandas konvertiert beim Laden der Datei automatisch Zeichenfolgenummern in CSVs in den richtigen Typ (int, float usw.).Hinweis:
utf8
öffnen, wenn Sie ihr einen Pfad geben. Standardmäßig wird dies in python3 verwendet und es werden auch Header ermittelt.dataframe.to_dict('records')
csv
Modul müssen Sie es füttern,OrderedDict
sonst werden sie in zufälliger Reihenfolge angezeigt (wenn Sie in Python <3.5 arbeiten). Weitere Informationen finden Sie unter: Beibehalten der Spaltenreihenfolge in Python Pandas DataFrame .quelle
Da @User und @BiXiC hier um Hilfe bei UTF-8 gebeten haben, hier eine Variation der Lösung von @Matthew. (Ich darf keinen Kommentar abgeben, also antworte ich.)
quelle
Dies wäre der einfachste Weg, Daten in eine CSV- Datei zu schreiben
quelle
Hier ist eine andere, allgemeinere Lösung, vorausgesetzt, Sie haben keine Liste von Zeilen (möglicherweise passen sie nicht in den Speicher) oder eine Kopie der Header (möglicherweise ist die
write_csv
Funktion generisch):Hinweis : Der hier verwendete OrderedDict-Konstruktor behält nur die Reihenfolge in Python> 3.4 bei. Wenn die Reihenfolge wichtig ist, verwenden Sie das
OrderedDict([('name', 'bob'),('age',25)])
Formular.quelle
quelle