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, seperti 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)
- Perhatikan bahwa
csv
dalam python 3 memerlukan newline=''
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.
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
catatan:
- panda akan mengurus membuka file untuk Anda jika Anda memberikan path, dan akan default ke
utf8
dalam python3, dan mencari tahu header juga.
- kerangka data tidak sama dengan struktur yang diberikan CSV kepada Anda, jadi Anda menambahkan satu baris saat memuat untuk mendapatkan hal yang sama:
dataframe.to_dict('records')
- panda juga mempermudah kontrol urutan kolom dalam file csv Anda. Secara default, mereka abjad, tetapi Anda dapat menentukan urutan kolom. Dengan
csv
modul vanilla , Anda perlu memberinya OrderedDict
atau mereka akan muncul dalam urutan acak (jika bekerja dengan python <3.5). Lihat: Mempertahankan urutan kolom dalam Python Pandas DataFrame untuk lebih.