Artikel ini bagian dari seri Belajar Python Level Basic di hanifmu.com. Di artikel sebelumnya kita sudah membahas with Statement. Sekarang kita beri struktur pada data yang disimpan.
File teks biasa menyimpan data apa adanya. Saat data mulai berupa tabel atau daftar berpasangan, menyimpan dan membacanya kembali secara manual jadi merepotkan. CSV dan JSON menyelesaikan masalah itu.
CSV dan JSON
CSV (Comma Separated Values) menyimpan data tabel dalam teks. Setiap baris adalah satu data, dan setiap kolom dipisahkan koma. Format ini cocok untuk data yang berbentuk baris dan kolom.
JSON (JavaScript Object Notation) menyimpan data terstruktur dengan pasangan key dan value. Bentuknya mirip dictionary Python, sehingga cocok untuk data bersarang.
Keduanya berupa teks biasa, jadi mudah dibuka di editor apa pun dan mudah dikirim lewat jaringan. Python sudah menyediakan modul csv dan json tanpa perlu instalasi tambahan.
Menulis CSV
Untuk menulis CSV, gunakan modul csv:
import csv
data = [
["Nama", "Umur", "Kota"],
["Budi", 25, "Jakarta"],
["Sari", 30, "Bandung"],
["Anton", 22, "Surabaya"],
]
with open("siswa.csv", "w", newline="", encoding="utf-8") as file:
penulis = csv.writer(file)
penulis.writerows(data)
Isi siswa.csv:
Nama,Umur,Kota
Budi,25,Jakarta
Sari,30,Bandung
Anton,22,Surabaya
Parameter newline="" penting saat menulis CSV. Tanpa itu, baris kosong bisa muncul di Windows karena perbedaan cara menandai akhir baris.
writerows() menulis beberapa baris sekaligus. Untuk satu baris, gunakan writerow():
with open("siswa.csv", "a", newline="", encoding="utf-8") as file:
penulis = csv.writer(file)
penulis.writerow(["Rina", 27, "Semarang"])
Membaca CSV
Untuk membaca, gunakan csv.reader(). Hasilnya berupa baris-baris yang bisa diiterasi:
import csv
with open("siswa.csv", "r", encoding="utf-8") as file:
pembaca = csv.reader(file)
for baris in pembaca:
print(baris)
Output:
['Nama', 'Umur', 'Kota']
['Budi', '25', 'Jakarta']
['Sari', '30', 'Bandung']
['Anton', '22', 'Surabaya']
Perhatikan bahwa semua nilai terbaca sebagai string, termasuk umur. Kalau butuh angka, konversi dulu.
CSV dengan Header
Modul csv punya DictReader dan DictWriter yang memakai baris pertama sebagai nama kolom. Cara ini membuat kode lebih mudah dibaca karena tidak perlu mengingat urutan kolom.
import csv
with open("siswa.csv", "r", encoding="utf-8") as file:
pembaca = csv.DictReader(file)
for baris in pembaca:
print(f"{baris['Nama']} dari {baris['Kota']}")
Output:
Budi dari Jakarta
Sari dari Bandung
Anton dari Surabaya
Untuk menulis dengan header otomatis:
import csv
data = [
{"Nama": "Budi", "Umur": 25, "Kota": "Jakarta"},
{"Nama": "Sari", "Umur": 30, "Kota": "Bandung"},
]
with open("siswa.csv", "w", newline="", encoding="utf-8") as file:
kolom = ["Nama", "Umur", "Kota"]
penulis = csv.DictWriter(file, fieldnames=kolom)
penulis.writeheader()
penulis.writerows(data)
Menulis JSON
Modul json mengubah struktur data Python menjadi teks JSON:
import json
siswa = {
"nama": "Budi",
"umur": 25,
"hobi": ["membaca", "bersepeda"],
}
with open("siswa.json", "w", encoding="utf-8") as file:
json.dump(siswa, file, indent=2)
Isi siswa.json:
{
"nama": "Budi",
"umur": 25,
"hobi": [
"membaca",
"bersepeda"
]
}
Parameter indent=2 membuat hasilnya rapi dan mudah dibaca manusia. Tanpa itu, seluruh JSON ditulis dalam satu baris.
Untuk mengubah objek menjadi string tanpa menyimpannya ke file, gunakan json.dumps():
import json
teks = json.dumps({"nama": "Sari", "umur": 30})
print(teks)
# {"nama": "Sari", "umur": 30}
Membaca JSON
Untuk membaca, gunakan json.load():
import json
with open("siswa.json", "r", encoding="utf-8") as file:
data = json.load(file)
print(data["nama"]) # Budi
print(data["hobi"]) # ['membaca', 'bersepeda']
Hasilnya berupa dictionary biasa, jadi bisa diakses dengan key seperti biasanya.
Kalau JSON berada dalam string, gunakan json.loads():
import json
teks = '{"nama": "Sari", "umur": 30}'
data = json.loads(teks)
print(data["nama"]) # Sari
Menangani Data Tidak Valid
Saat membaca JSON, format yang salah akan memicu JSONDecodeError. Bungkus dengan try dan except agar program tetap aman:
import json
try:
with open("siswa.json", "r", encoding="utf-8") as file:
data = json.load(file)
except FileNotFoundError:
print("File tidak ditemukan")
except json.JSONDecodeError:
print("Isi file bukan JSON yang valid")
else:
print(data)
Perhatikan juga bahwa tipe data JSON terbatas. Tipe seperti tuple dan set tidak dikenal JSON. tuple akan berubah menjadi list saat dibaca kembali.
Kapan Memakai CSV dan JSON?
| Aspek | CSV | JSON |
|---|---|---|
| Bentuk data | Tabel baris dan kolom | Bersarang, key dan value |
| Ukuran | Lebih ringkas untuk data tabel | Lebih besar karena key diulang |
| Keterbacaan | Sederhana, cocok untuk spreadsheet | Lebih jelas strukturnya |
| Penggunaan umum | Data hasil ekspor, laporan | API, konfigurasi, data bertingkat |
Pakai CSV kalau datanya rapi seperti tabel. Pakai JSON kalau strukturnya bertingkat, misalnya daftar siswa yang tiap siswa punya daftar nilai.
Contoh Program: Konversi CSV ke JSON
Mari ubah data tabel menjadi JSON bertingkat:
# csv_ke_json.py
import csv
import json
siswa = []
with open("siswa.csv", "r", encoding="utf-8") as file:
pembaca = csv.DictReader(file)
for baris in pembaca:
siswa.append({
"nama": baris["Nama"],
"umur": int(baris["Umur"]),
"kota": baris["Kota"],
})
with open("siswa.json", "w", encoding="utf-8") as file:
json.dump(siswa, file, indent=2, ensure_ascii=False)
print(f"{len(siswa)} data berhasil dikonversi")
Program ini membaca CSV, mengubah setiap baris menjadi dictionary, lalu menyimpannya sebagai JSON. Perhatikan int(baris["Umur"]) untuk mengembalikan umur menjadi angka, dan ensure_ascii=False agar karakter non-ASCII tetap terbaca.
Kesalahan Umum Pemula
- Lupa
newline=""saat menulis CSV — bisa muncul baris kosong di Windows. - Mengira hasil
csv.reader()sudah berupa angka — semua terbaca sebagai string. - Menulis JSON tanpa
indent— hasilnya satu baris panjang dan sulit dibaca. - Menyimpan tipe yang tidak didukung JSON —
setdantupleperlu dikonversi dulu. - Tidak menangani
JSONDecodeError— satu file rusak bisa menghentikan seluruh program.
Ringkasan
- CSV menyimpan data tabel, JSON menyimpan data terstruktur dengan key dan value
- Modul
csvmenyediakanreader,writer,DictReader, danDictWriter - Selalu tambahkan
newline=""saat menulis CSV - Modul
jsonmenyediakandump,dumps,load, danloads indentmembuat JSON rapi,ensure_ascii=Falsemenjaga karakter khusus- Bungkus pembacaan file dengan penanganan error seperti
JSONDecodeError
Langkah Selanjutnya
Kamu sudah bisa menyimpan dan mengambil data dalam format yang terstruktur. Bekal ini menutup perjalanan panjang dari variabel sampai file.
Selanjutnya kita akan membahas cara memecah program menjadi beberapa file, memakai modul bawaan Python, serta mengelola package dengan pip dan virtual environment.
