Tutorial membaca file CSV dengan Python

Pada tutorial sebelumnya, kita sudah belajar membaca dan parsing beberapa jenis file.. diantaranya ada File Teks biasa (plain text), XML, dan JSON.

Ini bisa kamu baca di:

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,Jokowi Dodo,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', 'Jokowi Dodo', '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 dlimiter tab
csv.reader(csv_file, delimiter="\t")
# membaca CSV dengan dlimiter titik dua :
csv.reader(csv_file, delimiter=":")
# membaca CSV dengan dlimiter titik koma ;
csv.reader(csv_file, delimiter=";")

Sekarang kita punya variabel csv_reder, 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 disini 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.

Silahkan 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.

Silahkan 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…

Silahkan 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        Jokowi Dodo     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. Silahkan 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        Jokowi Dodo     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:

Menulis data ke CSV

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:

ModeKetereangan
“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 mode a;
  • 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. Selain QUOTE_MINIMAL, ada juga QUOTE_ALL, QUOTE_NONNUMERIC, dan QUOTE_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..

Silahkan 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:

Menulis data dictionary ke CSV

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.. silahkan baca:

Oh iya, source code tutorial ini bisa kamu download di Github.

🎁 [Download Source Code]


  1. https://docs.python.org/3/library/csv.html ↩︎