Frage

Ich habe eine Liste von Wörterbüchern, die wie folgt aussieht:

toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]

Was sollte ich tun, konvertieren Sie diese in eine csv-Datei, die wie folgt aussieht:

name,age,weight
bob,25,200
jim,31,180
War es hilfreich?

Lösung

import csv
toCSV = [{'name':'bob','age':25,'weight':200},
         {'name':'jim','age':31,'weight':180}]
keys = toCSV[0].keys()
with open('people.csv', 'wb') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(toCSV)

EDIT:Meine Vorherige Lösung nicht handhaben der Bestellung.Wie bereits von Wilduck, DictWriter ist hier besser geeignet.

Andere Tipps

dies ist, wenn Sie ein Wörterbuch-Liste:

import csv
with open('names.csv', 'w') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})

Weil @User und @BiXiC um Hilfe gebeten, die mit UTF-8 hier ist eine variation der Lösung von @Matthew.(Ich darf nicht zu kommentieren, also ich bin, zu beantworten.)

import unicodecsv as csv
toCSV = [{'name':'bob','age':25,'weight':200},
         {'name':'jim','age':31,'weight':180}]
keys = toCSV[0].keys()
with open('people.csv', 'wb') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(toCSV)

In python 3 sind die Dinge ein wenig anders, aber viel einfacher und weniger fehleranfällig.Es ist eine gute Idee zu sagen, die CSV-Datei muss geöffnet werden utf8 Codierung, als es ermöglicht, dass Daten mehr tragbar zu anderen (vorausgesetzt, Sie sind nicht mit einer restriktiveren Codierung, wie latin1)

import csv
toCSV = [{'name':'bob','age':25,'weight':200},
         {'name':'jim','age':31,'weight':180}]
with open('people.csv', 'w', encoding='utf8', newline='') as output_file:
    fc = csv.DictWriter(output_file, 
                        fieldnames=toCSV[0].keys(),

                       )
    fc.writeheader()
    fc.writerows(toCSV)
  • Beachten Sie, dass csv in python 3 muss die newline='' parameter, sonst erhalten Sie leere Zeilen in Ihrer CSV wenn Sie in excel öffnen/opencalc.

Alternativ:Ich bevorzuge verwenden, um die csv-handler in der pandas Modul.Ich finde, es ist mehr tolerant von Codierung Fragen und pandas wird automatisch konvertieren Sie string-Nummern in CSVs in den richtigen Typ (int,float,usw.) beim laden der Datei.

import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)

Hinweis:

  • pandas kümmern öffnen der Datei für Sie, wenn Sie geben es Weg, und wird standardmäßig auf utf8 in Python ist3, und herauszufinden, Kopfzeilen zu.
  • ein dataframe ist nicht die gleiche Struktur wie das, was CSV Ihnen, so dass Sie fügen Sie eine Zeile beim laden, um die gleiche Sache: dataframe.to_dict('records')
  • pandas auch macht es viel leichter zu kontrollieren die Reihenfolge der Spalten in Ihrer csv-Datei.Durch Standard, Sie sind alphabetische, aber Sie können angeben der Reihenfolge der Spalten.Mit Vanille csv Modul, die Sie brauchen, um zu füttern es ein OrderedDict oder Sie erscheinen in zufälliger Reihenfolge (wenn die Arbeit in python < 3.5).Siehe: Erhaltung Spalte, um in Python Pandas DataFrame für mehr.

Hier ist eine weitere, Allgemeine Lösung, vorausgesetzt, Sie don nicht haben eine Liste von Zeilen (vielleicht sind Sie nicht in den Speicher passt) oder eine Kopie der Kopfzeilen (vielleicht die write_csv Funktion ist generisch):

def gen_rows():
    yield OrderedDict(name='bob', age=25, weight=200)
    yield OrderedDict(name='jim', age=31, weight=180)

def write_csv():
    it = genrows()
    first_row = it.next()  # __next__ in py3
    with open("people.csv", "w") as outfile:
        wr = csv.DictWriter(outfile, fieldnames=list(first_row))
        wr.writeheader()
        wr.writerow(first_row)
        wr.writerows(it)

Hinweis:die OrderedDict Konstruktor verwendet, hier nur bewahrt, um in python >3.4.Wenn die Reihenfolge wichtig ist, verwenden Sie die OrderedDict([('name', 'bob'),('age',25)]) form.

import csv

with open('file_name.csv', 'w') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(('colum1', 'colum2', 'colum3'))
    for key, value in dictionary.items():
        writer.writerow([key, value[0], value[1]])

Dies wäre der einfachste Weg, um schreiben von Daten zu .csv Datei

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top