Persistensi Data Python - Modul CSV

CSV stands for comma separated values. Format file ini adalah format data yang umum digunakan saat mengekspor / mengimpor data ke / dari spreadsheet dan tabel data di database. Modul csv dimasukkan ke dalam pustaka standar Python sebagai hasil dari PEP 305. Modul ini menyajikan kelas dan metode untuk melakukan operasi baca / tulis pada file CSV sesuai rekomendasi PEP 305.

CSV adalah format data ekspor yang disukai oleh perangkat lunak spreadsheet Microsoft Excel. Namun, modul csv dapat menangani data yang direpresentasikan oleh dialek lain juga.

Antarmuka CSV API terdiri dari kelas penulis dan pembaca berikut -

penulis()

Fungsi dalam modul csv ini mengembalikan objek penulis yang mengubah data menjadi string yang dipisahkan dan disimpan dalam objek file. Fungsi tersebut membutuhkan objek file dengan izin tulis sebagai parameter. Setiap baris yang ditulis dalam file mengeluarkan karakter baris baru. Untuk mencegah spasi tambahan antar baris, parameter baris baru disetel ke ''.

Kelas penulis memiliki metode berikut -

writerow ()

Metode ini menulis item dalam iterable (list, tuple atau string), memisahkannya dengan karakter koma.

penulis ()

Metode ini mengambil daftar iterable, sebagai parameter dan menulis setiap item sebagai baris item yang dipisahkan koma dalam file.

Example

Contoh berikut menunjukkan penggunaan fungsi writer (). Pertama, file dibuka dalam mode 'w'. File ini digunakan untuk mendapatkan objek penulis. Setiap tupel dalam daftar tupel kemudian ditulis ke file menggunakan metode writerow ().

import csv
   persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   csvfile=open('persons.csv','w', newline='')
   obj=csv.writer(csvfile)
   for person in persons:
      obj.writerow(person)
csvfile.close()

Output

Ini akan membuat file 'person.csv' di direktori saat ini. Ini akan menunjukkan data berikut.

Lata,22,45
Anil,21,56
John,20,60

Alih-alih mengulang daftar untuk menulis setiap baris secara individual, kita bisa menggunakan metode writerows ().

csvfile=open('persons.csv','w', newline='')
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
   obj=csv.writer(csvfile)
   obj.writerows(persons)
   obj.close()

pembaca()

Fungsi ini mengembalikan objek pembaca yang mengembalikan iterator baris di csv file. Menggunakan perulangan for biasa, semua baris dalam file ditampilkan dalam contoh berikut -

Contoh

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   for row in obj:
      print (row)

Keluaran

['Lata', '22', '45']
['Anil', '21', '56']
['John', '20', '60']

Objek pembaca adalah iterator. Oleh karena itu, ini mendukung fungsi next () yang juga dapat digunakan untuk menampilkan semua baris dalam file csv daripada afor loop.

csvfile=open('persons.csv','r', newline='')
   obj=csv.reader(csvfile)
   while True:
   try:
      row=next(obj)
      print (row)
   except StopIteration:
      break

Seperti yang disebutkan sebelumnya, modul csv menggunakan Excel sebagai dialek defaultnya. Modul csv juga mendefinisikan kelas dialek. Dialek adalah seperangkat standar yang digunakan untuk mengimplementasikan protokol CSV. Daftar dialek yang tersedia dapat diperoleh dengan fungsi list_dialects ().

>>> csv.list_dialects()
['excel', 'excel-tab', 'unix']

Selain iterable, modul csv dapat mengekspor objek kamus ke file CSV dan membacanya untuk mengisi objek kamus Python. Untuk tujuan ini, modul ini mendefinisikan kelas-kelas berikut -

DictWriter ()

Fungsi ini mengembalikan objek DictWriter. Ini mirip dengan objek penulis, tetapi barisnya dipetakan ke objek kamus. Fungsi tersebut membutuhkan objek file dengan izin tulis dan daftar kunci yang digunakan dalam kamus sebagai parameter nama kolom. Ini digunakan untuk menulis baris pertama dalam file sebagai header.

writeheader ()

Metode ini menulis daftar kunci dalam kamus sebagai baris yang dipisahkan koma sebagai baris pertama dalam file.

Dalam contoh berikut, daftar item kamus ditentukan. Setiap item dalam daftar adalah kamus. Menggunakan metode writrows (), mereka ditulis ke file dengan cara dipisahkan koma.

persons=[
   {'name':'Lata', 'age':22, 'marks':45}, 
   {'name':'Anil', 'age':21, 'marks':56}, 
   {'name':'John', 'age':20, 'marks':60}
]
csvfile=open('persons.csv','w', newline='')
fields=list(persons[0].keys())
obj=csv.DictWriter(csvfile, fieldnames=fields)
obj.writeheader()
obj.writerows(persons)
csvfile.close()

File person.csv menunjukkan konten berikut -

name,age,marks
Lata,22,45
Anil,21,56
John,20,60

DictReader ()

Fungsi ini mengembalikan objek DictReader dari file CSV yang mendasarinya. Seperti, dalam kasus, objek pembaca, yang ini juga merupakan iterator, yang menggunakan konten file mana yang diambil.

csvfile=open('persons.csv','r', newline='')
obj=csv.DictReader(csvfile)

Kelas menyediakan atribut fieldnames, mengembalikan kunci kamus yang digunakan sebagai header file.

print (obj.fieldnames)
['name', 'age', 'marks']

Gunakan loop di atas objek DictReader untuk mengambil objek kamus individual.

for row in obj:
   print (row)

Ini menghasilkan keluaran berikut -

OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
OrderedDict([('name', 'Anil'), ('age', '21'), ('marks', '56')])
OrderedDict([('name', 'John'), ('age', '20'), ('marks', '60')])

Untuk mengonversi objek OrderedDict ke kamus normal, pertama-tama kita harus mengimpor OrderedDict dari modul koleksi.

from collections import OrderedDict
   r=OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
   dict(r)
{'name': 'Lata', 'age': '22', 'marks': '45'}