Cara Baca dan Parse File CSV di Python (dan Contoh Programnya)
Pada tutorial sebelumnya, kita sudah belajar membaca dan parsing beberapa jenis file.. di antaranya ada File Teks biasa (plain text), XML, dan JSON.
Ini bisa kamu baca di:
- Cara Baca dan tulis file teks di Python
- Cara Parsing JSON di Python
- Cara baca dan parsing XML di Python
Nah berikutnya kita akan mencoba membaca dan parsing File CSV dengan Python.
Apa itu file CSV?
dan bagaimana cara membacanya di Python?
Mari kita bahas…
Apa itu File CSV?
File CSV (Comma Separated Values) sebenarnya adalah file teks, tapi ia memiliki struktur untuk mengatur datanya.
Seperti namanya, struktur yang digunakan CSV adalah koma. Koma digunakan untuk memisah data.
Contoh isi file CSV:
NO,NAMA,ALAMAT
1,Bambang,Bandung
2,Cacha,Surabaya
3,Diana,Mataram
4,Emi,Jakarta
Kalau dipikir-pikir..
..mirip seperti tabel ya.
Baris pertama biasanya berisi label atau header. Kemudian di baris berikutnya baru berisi data.
Kalau kamu perhatikan, semua data dipisah dengan tanda koma. Koma ini disebut delimiters (pemisah).
Selain menggunakan delimiter koma,
ada juga CSV yang menggunakan tab (\t
),
titik dua (:
), dan titik koma (;
).
Bagaimana jika di data ada tanda koma?
Misal kita punya data dengan nama gelar ditulis seperti ini:
Bambang, S.Kom
Jika ada data yang mengandung tanda koma, kita bisa atasi dengan tanda petik.
Contoh:
NO,NAMA,ALAMAT
1,"Bambang, S.Kom",Bandung
2,"Cacha, S.H",Surabaya
3,"Diana, S.Kom",Mataram
4,"Emi, M.Kom",Jakarta
Cara Membaca File CSV di Python
Cara membaca file CSV, sama saja seperti cara membaca file teks biasa.
Bedanya terletak pada cara parsing datanya.
Pada teks biasa, kita bisa langsung ambil datanya.
Sedangkan di file CSV, kita harus olah lagi dengan
library csv
.
Bagaimana caranya?
Mari kita coba!
Buatlah file CSV baru bernama contacts.csv
dengan isi sebagai berikut:
NO,NAMA,TELEPON
1,Bambang,081234
2,Richard,08712333
3,Bapak Budi,08733311
4,Joko,0851231
Kemudian buat program dengan nama baca_csv.py
dan isi dengan kode berikut:
import csv
with open('contacts.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=",")
print(csv_reader)
for row in csv_reader:
print(row)
Hasilnya:
<_csv.reader object at 0x7f0b2341c5f8>
['NO', 'NAMA', 'TELEPON']
['1', 'Bambang', '081234']
['2', 'Richard', '08712333']
['3', 'Bapak Budi', '08733311']
['4', 'Joko', '0851231']
Sekarang coba perhatikan:
Pada program di atas, kita membuka file contacts.csv
dengan fungsi open()
. Lalu menyimpannya
ke dalam variabel csv_file
.
Berikutnya kita menggunakan modul csv
untuk membacanya.
csv.reader(csv_file, delimiter=",")
Delimiter yang dipakai adalah koma (,
),
karena file CSV yang kita baca menggunakan
delimiter itu juga.
Jika tidak pakai koma, gimana?
Tinggal ganti aja koma jadi karakter delimiter-nya.
Contoh:
# membaca CSV dengan delimiter tab
csv.reader(csv_file, delimiter="\t")
# membaca CSV dengan delimiter titik dua :
csv.reader(csv_file, delimiter=":")
# membaca CSV dengan delimiter titik koma ;
csv.reader(csv_file, delimiter=";")
Sekarang kita punya variabel csv_reader
,
variabel ini sebenarnya adalah sebuah objek.
<_csv.reader object at 0x7f09dfaed5f8>
Di dalam objek csv_reader
, terdapat
data yang didapatkan dari file CSV.
Nah untuk melihat isi data ini, kita harus menggunakan perulangan.
for row in csv_reader:
print(row)
Variabel row
akan berisi sebuah list
dari tiap baris data CSV.
Cara Parsing File CSV di Python
Parsing di sini artinya mengurai atau mengubah data yang tadinya dalam bentuk CSV menjadi bentuk yang bisa dibaca dalam program.
Misalnya mengubahnya dalam bentuk list atau dictionary.
1. Parsing CSV menjadi List
Oke, pertama kita akan coba dulu parsing CSV menjadi list.
Silakan ubah program yang tadi, menjadi seperti ini:
import csv
contacts = []
with open('contacts.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=",")
for row in csv_reader:
contacts.append(row)
print(contacts)
Pada program ini kita membuat list contacts
,
kemudian list ini kita isi dengan data yang
kita dapatkan dari row
.
Maka isi list contacts
akan seperti ini:
[['NO', 'NAMA', 'TELEPON'], ['1', 'Bambang', '081234'], ['2', 'Richard', '08712333'], ['3', 'Bapak Budi', '08733311'], ['4', 'Jokowi Dodo', '0851231']]
Sepertinya label dari datanya juga ikut
masuk ke dalam list contacts
.
Karena kita menginginkan hanya data saja
yang tersimpan di dalam list contacts
,
maka kita harus menghapus labelnya.
Caranya, kita bisa gunakan method pop()
untuk mengeluarkan item pertama dan
menyimpannya di tempat lain.
Silakan ubah kode programnya menjadi seperti ini:
import csv
contacts = []
with open('contacts.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=",")
for row in csv_reader:
contacts.append(row)
labels = contacts.pop(0)
print(labels)
print(contacts)
Maka sekarang kita punya dua list,
yakni: contacts
dan labels
yang isinya
seperti ini:
#isi list labels:
['NO', 'NAMA', 'TELEPON']
# isi list contacts:
[['1', 'Bambang', '081234'], ['2', 'Richard', '08712333'], ['3', 'Bapak Budi', '08733311'], ['4', 'Jokowi Dodo', '0851231']]
Kita sudah memiliki datanya dalam bentuk list. Berikutnya terserah kita mau dipakai buat apa.
Mari kita coba menampilkannya saja…
Silakan tambahkan kode programnya agar menjadi seperti ini:
import csv
contacts = []
with open('contacts.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=",")
for row in csv_reader:
contacts.append(row)
labels = contacts.pop(0)
#print(labels)
#print(contacts)
print(f'{labels[0]} \t {labels[1]} \t\t {labels[2]}')
print("-"*34)
for data in contacts:
print(f'{data[0]} \t {data[1]} \t {data[2]}')
Hasilnya:
NO NAMA TELEPON
----------------------------------
1 Bambang 081234
2 Richard 08712333
3 Bapak Budi 08733311
4 Joko 0851231
2. Parsing CSV menjadi Dictionary
Berikutnya kita akan coba parsing CSV menjadi Dictionary.
Dictionary adalah struktur data yang tersusun dari key dan value.
Jika kamu belum tahu tentang dictionary, saya sarankan untuk membaca: “Tutorial Dictionary di Python” terlebih dahulu.
Nah, untuk parsing CSV menjadi dictionary,
kita bisa gunakan fungsi DictReader()
.
Mari kita coba…
Buatlah program baru dengan nama parse_dict.py
,
kemudian isi dengan kode berikut:
import csv
contacts = []
with open('contacts.csv') as csv_file:
csv_reader = csv.DictReader(csv_file)
for row in csv_reader:
contacts.append(row)
print(contacts)
Maka hasil outputnya:
[OrderedDict([('NO', '1'), ('NAMA', 'Bambang'), ('TELEPON', '081234')]), OrderedDict([('NO', '2'), ('NAMA', 'Richard'), ('TELEPON', '08712333')]), OrderedDict([('NO', '3'), ('NAMA', 'Bapak Budi'), ('TELEPON', '08733311')]), OrderedDict([('NO', '4'), ('NAMA', 'Jokowi Dodo'), ('TELEPON', '0851231')])]
Berdasarkan hasil output tersebut, kita bisa mengetahui..
kalau list contacts
sekarang berisi data dalam bentuk
dictionary.
{'NO': '1', 'NAMA': 'Bambang', 'TELEPON': '081234'}
Ini berkat fungsi DictReader()
yang
berfungsi untuk membaca CSV dalam bentuk
dictionary.
Label akan berfungsi sebagai key, sedangkan datanya akan menjadi nilai.
Sekarang mari kita coba menampilkan semua data. Silakan ubah programnya menjadi seperti ini:
import csv
contacts = []
with open('contacts.csv') as csv_file:
csv_reader = csv.DictReader(csv_file)
for row in csv_reader:
contacts.append(row)
print("NO \t NAMA \t\t TELEPON")
print("-" * 32)
for data in contacts:
print(f"{data['NO']} \t {data['NAMA']} \t {data['TELEPON']}")
Hasilnya:
NO NAMA TELEPON
--------------------------------
1 Bambang 081234
2 Richard 08712333
3 Bapak Budi 08733311
4 Joko 0851231
Cara Menulis File CSV
Sama seperti parsing tadi..
..data yang bisa kita tulis ke CSV juga ada dua, yakni: list dan dictionary.
Pertama kita akan coba yang list dulu.
1. Menulis Data List ke CSV
Buatlah program baru bernama tulis_csv_list.py
,
kemudian isi dengan kode berikut:
import csv
with open('contacts.csv', mode='a') as csv_file:
# membuat objek writer
writer = csv.writer(csv_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
# menulis baris ke file CSV
writer.writerow(["5", "Dian", "021100022"])
writer.writerow(["6", "Meli", "0214444432"])
print("Writing Done!")
Setelah itu coba jalankan dan buka kembali
program parse_dic.py
.
Maka hasilnya:
Coba perhatikan kode program di atas!
Kita menggunakan mode a
(append) saat membuka file CSV,
ini artinya kita mau menambahkan isinya.
open('contacts.csv', mode='a')
Selain mode a
ada juga mode w
untuk menulis
ulang seluruh isi file CSV.
Untuk mode yang lain, kamu bisa lihat di tabel ini:
Mode | Keterangan |
---|---|
“r” | hanya baca saja |
“w” | akses untuk menulis file, jika file sudah ada, maka file akan di replace dan diganti dengan yang baru ditulis |
“a” | digunakan untuk append atau menambah data ke file, artinya jika sudah ada data dalam file, maka akan ditambahkan dan tidak di-replace |
“r+” | digunakan untuk membaca sekaligus menulis data ke file |
Oh iya, ini sudah pernah kita pelajari pada: “Tutorial Baca Tulis File di Python”
Berikutnya kita membutuhkan objek writer
agar bisa menulis data ke CSV.
Objek ini bisa dibuat dengan csv.writer()
:
writer = csv.writer(csv_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
Ada beberapa parameter yang kita berikan pada fungsi ini:
csv_file
adalah file CSV yang sudah dibuka dengan modea
;delimiter
adalah simbol delimiter yang digunakan pada CSV;quotechar
adalah tanda kutip yang akan digunakan untuk data yang mengandung koma; pada contoh di atas, kita menggunakan petik ganda;quoting
adalah metode tanda petik yang digunakan.csv.QUOTE_MINIMAL
artinya akan memberikan tanda petik pada data yang mengandung karakter delimiter saja. SelainQUOTE_MINIMAL
, ada jugaQUOTE_ALL
,QUOTE_NONNUMERIC
, danQUOTE_NONE
. 1
Berikutnya kita bisa menggunakan objek writer
untuk menulis
data ke CSV:
writer.writerow(["5", "Dian", "021100022"])
Oh iya, data yang ditulis harus dalam satu baris.
2. Menulis Data Dictionary ke CSV
Berikutnya kita akan mencoba menulis data dalam bentuk dictionary ke dalam CSV.
Sebenarnya kita hanya perlu mengganti jenis
writer
-nya saja.
Mari kita coba..
Silakan buat program baru bernama tulis_csv_dict.py
,
kemudian isi dengan kode berikut:
import csv
with open('contacts.csv', mode='a') as csv_file:
# menentukan label
fieldnames = ['NO', 'NAMA', 'TELEPON']
# membuat objek writer
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
# menulis baris ke file CSV
writer.writeheader()
writer.writerow({'NO': '10', 'NAMA': 'Via Vallen', 'TELEPON': '02109999'})
writer.writerow({'NO': '11', 'NAMA': 'M. Andi', 'TELEPON': '02148488888'})
print("Writing Done!")
Hasilnya:
Coba perhatikan…
Lebelnya ikut ditambahkan sebagai data
karena kita menggunakan fungsi writer.writeheader()
.
Sebenarnya fungsi ini tidak perlu dipanggil,
jika kita menggunakan mode a
.
Fungsi writeheader()
ini kita butuhkan
saat menggunakan mode w
, karena semua
isi file CSV akan ditulis ulang.
Apa Selanjutnya?
Nah itu dia cara membaca dan parsing file CSV di Python.
Contoh-contoh program di atas merupakan contoh sederhana dalam membaca dan menulis file CSV.
Karena itu..
Selanjutnya agar kamu lebih paham.. silakan baca:
Oh iya, source code tutorial ini bisa kamu download di Github.
🎁 [ Download Source Code]