Python 3'te işler biraz farklı, ama daha basit ve daha az hata eğilimli. CSV'ye dosyanızın utf8
kodlama ile açılması gerektiğini söylemek iyi bir fikirdir , çünkü bu verilerin başkaları için daha taşınabilir olmasını sağlar (daha kısıtlayıcı bir kodlama kullanmadığınız varsayılarak 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)
csv
Python 3'te newline=''
parametreye ihtiyaç duyulduğunu unutmayın , aksi takdirde excel / opencalc'de açarken CSV'nizde boş çizgiler elde edersiniz.
Alternatif olarak: pandas
Modüldeki csv işleyicisini kullanmayı tercih ederim . Kodlama sorunlarını daha toleranslı buluyorum ve pandalar dosyayı yüklerken otomatik olarak CSV'lerde dize numaralarını doğru türe (int, float, vb.) Dönüştürecek.
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
Not:
- pandalar bir yol verirseniz dosyayı sizin için açmaya özen gösterir
utf8
ve python3'te varsayılan olarak kullanılır ve başlıkları da bulur.
- bir veri çerçevesi CSV'nin size verdiği yapı ile aynı değildir, bu nedenle aynı şeyi almak için yükleme üzerine bir satır eklersiniz:
dataframe.to_dict('records')
- pandas ayrıca csv dosyanızdaki sütunların sırasını kontrol etmeyi çok daha kolay hale getirir. Varsayılan olarak alfabetiktir, ancak sütun sırasını belirleyebilirsiniz. Vanilya
csv
modülü ile, onu beslemeniz gerekir OrderedDict
veya rastgele bir sırada görünürler (python <3.5'te çalışıyorsa). Daha fazla bilgi için bkz. Python Pandas DataFrame'de sütun sırasını koruma .