Saya memiliki daftar kamus yang terlihat seperti ini:
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
Apa yang harus saya lakukan untuk mengonversikan ini ke file csv yang terlihat seperti ini:
name,age,weight
bob,25,200
jim,31,180
python
csv
dictionary
data-conversion
backus
sumber
sumber
Jawaban:
EDIT: Solusi saya sebelumnya tidak menangani pesanan. Seperti dicatat oleh Wilduck, DictWriter lebih tepat di sini.
sumber
with open('people.csv', 'wb') as f: ...
dict_writer.writeheader()
sebagai gantidict_writer.writer.writerow(keys)
open('people.csv', 'w')
set().union(*(d.keys() for d in mylist))
untuk mendapatkan semua kunci dalam daftar (jika Anda memiliki beberapa yang tidak memiliki semua kunci.)ini adalah ketika Anda memiliki satu daftar kamus:
sumber
Dalam python 3 hal-hal sedikit berbeda, tetapi cara yang lebih sederhana dan lebih rentan kesalahan. Sebaiknya beri tahu CSV file Anda harus dibuka dengan
utf8
penyandian, karena itu membuat data lebih portabel untuk orang lain (dengan asumsi Anda tidak menggunakan penyandian yang lebih ketat, sepertilatin1
)csv
dalam python 3 memerlukannewline=''
parameter, jika tidak, Anda mendapatkan baris kosong di CSV Anda saat membuka di excel / opencalc.Atau: Saya lebih suka menggunakan handler csv di
pandas
modul. Saya menemukan itu lebih toleran terhadap masalah penyandian, dan panda akan secara otomatis mengkonversi nomor string dalam CSV menjadi tipe yang benar (int, float, dll) ketika memuat file.catatan:
utf8
dalam python3, dan mencari tahu header juga.dataframe.to_dict('records')
csv
modul vanilla , Anda perlu memberinyaOrderedDict
atau mereka akan muncul dalam urutan acak (jika bekerja dengan python <3.5). Lihat: Mempertahankan urutan kolom dalam Python Pandas DataFrame untuk lebih.sumber
Karena @User dan @BiXiC meminta bantuan dengan UTF-8 di sini variasi solusi oleh @Matthew. (Saya tidak diizinkan berkomentar, jadi saya menjawab.)
sumber
Ini akan menjadi cara paling sederhana untuk menulis data ke file .csv
sumber
Berikut ini adalah solusi lain yang lebih umum dengan asumsi Anda tidak memiliki daftar baris (mungkin tidak sesuai dengan memori) atau salinan tajuk (mungkin
write_csv
fungsinya generik):Catatan : konstruktor OrderedDict yang digunakan di sini hanya menyimpan pesanan dengan python> 3.4. Jika pesanan penting, gunakan
OrderedDict([('name', 'bob'),('age',25)])
formulir.sumber
sumber