Python 3'te işler biraz farklı, ama daha basit ve daha az hata eğilimli. CSV'ye dosyanızın utf8kodlama 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)
csvPython 3'te newline=''parametreye ihtiyaç duyulduğunu unutmayın , aksi takdirde excel / opencalc'de açarken CSV'nizde boş çizgiler elde edersiniz.
Alternatif olarak: pandasModü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
utf8ve 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
csvmodülü ile, onu beslemeniz gerekir OrderedDictveya 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 .