Artikel ini membahas I/O untuk dua format data terstruktur yang umum — json, sering dipakai oleh web API, dan csv, yang terbuka dengan rapi di software spreadsheet.
JSON vs CSV — Kapan pakai yang mana?JSON dapat mengekspresikan pasangan key/value dan struktur bersarang, jadi muncul di mana-mana dalam respons web API dan file config. CSV adalah format tabel "satu baris = satu record" flat yang langsung terbuka di spreadsheet seperti Excel, jadi menjadi andalan analisis data.
json — Konversi Dua Arah Antara Objek Python dan String JSON
JSON (JavaScript Object Notation) adalah format teks ringan yang mengekspresikan struktur hanya dengan "pasangan key/value" dan "list terurut", dipakai sebagai standar untuk respons web API dan file config. Modul json Python mengkonversi dict, list, string, angka, bool, dan None dari dan ke JSON.
Dua fungsi dasar sudah cukup untuk diingat. json.dumps(object) mengkonversi Python → string JSON, dan json.loads(string) mengkonversi string JSON → Python. Akhiran s berasal dari string — membedakannya dari dump / load, yang bekerja langsung dengan file.
Simetri json.dumps dan json.loadsBaris atas: dumps (dump string) = arah Python → string JSON. Baris bawah: loads (load string) = arah string JSON → Python. Varian tanpa s (dump / load) bekerja langsung dengan objek file.
Fungsi
Peran
Catatan
json.dumps(obj)
Python → string JSON
mengembalikan str
json.loads(text)
string JSON → Python
mengembalikan dict / list / dll.
json.dump(obj, file)
Python → tulis ke file
berikan f dari open()
json.load(file)
file → Python
berikan f dari open()
indent=N
pretty-print dengan indent N spasi
untuk pembaca manusia
ensure_ascii=False
keluarkan non-ASCII apa adanya
default-nya escape
ensure_ascii default-nya True
Secara default, json.dumps({"name": "café"}) menghasilkan '{"name": "caf\u00e9"}' — karakter non-ASCII di-escape sebagai \u. Secara teknis valid, tetapi sulit dibaca manusia dan membengkakkan ukuran file, jadi untuk data yang berisi karakter non-ASCII (aksen, emoji, CJK, dll.), biasakan untuk meneruskan ensure_ascii=False.
Konversi info pengguna ke JSON, parse kembali ke objek Python, dan cek tipe setiap variabel dengan type().
① Import modul json.
② Buat dictionary dengan name="Budi" dan list item ["Apple", "Banana"] (dua kunci: name dan items).
③ Konversi dict ke string JSON pretty-printed (terindentasi) dan cetak, lalu cetak type(text): untuk menunjukkan tipe string JSON (nonaktifkan escape non-ASCII jika data berisi aksen, emoji, dll.).
④ Parse string JSON kembali ke objek Python, lalu cetak type(parsed): dan type(items): untuk masing-masing (ekstrak items dari parsed).
⑤ Dari objek yang sudah di-parse, cetak nama: ◯◯ dan Item pertama: ◯◯ (elemen pertama dari items).
(Jika kamu menjalankannya dengan benar, penjelasan akan muncul.)
Python Editor
Jalankan kode untuk melihat output
Dasar csv — Tangani Baris dengan reader dan writer
CSV (Comma-Separated Values) adalah format teks polos di mana satu baris dipisah koma sama dengan satu record, dan karena software spreadsheet seperti Excel dapat membukanya langsung, format ini ada di mana-mana dalam alur kerja bisnis. Modul csv Python menyediakan fungsi untuk membaca dan menulis format ini baris demi baris.
Dasarnya adalah csv.writer(file) dan csv.reader(file): yang pertama menulis list nilai sebagai satu baris, yang kedua membaca CSV satu baris pada satu waktu sebagai list nilai. Dua jebakan: pertama, semua yang kamu baca kembali adalah string — jika butuh integer, konversi sendiri dengan int(). Kedua, selalu berikan newline='' ke open(...) supaya modul csv bisa mengelola karakter newline sendiri.
Apa yang dilakukan csv.writer dan csv.readerwriter.writerow(list)menulis list nilai sebagai satu baris CSV. reader kebalikannya — menarik baris CSV sebagai list nilai — dan yang krusial, semua nilai keluar sebagai string.
Selalu berikan newline='' ke open
Modul csv mengelola karakter newline sendiri, jadi kamu perlu meneruskan newline='' seperti open("x.csv", "w", newline=''). Lewati dan kamu bisa berakhir dengan CSV yang berisi baris kosong di Windows — jebakan klasik yang disebut di dokumen resmi Python.
Tulis list pengguna ke CSV, lalu baca kembali baris demi baris menggunakan file output.csv di filesystem in-browser (VFS).
① Import modul csv.
② Buka output.csv dalam mode tulis (dengan newline=''), buat writer, dan tulis 3 baris: header ["name", "age"] dan dua baris data ["Budi", 30] dan ["Siti", 25].
③ Buka kembali file yang sama dalam mode baca (dengan newline=''), buat reader, dan cetak baris satu per satu dengan for row in reader:.
Python Editor
Jalankan kode untuk melihat output
DictWriter dan DictReader — Baca dan Tulis Berdasarkan Nama Kolom
csv.writer / reader dari bagian sebelumnya bekerja berdasarkan posisi, jadi menambah kolom atau mengubah urutannya memaksa kamu menulis ulang setiap akses row[0] / row[1]. DictWriter / DictReader adalah versi yang membaca dan menulis berdasarkan nama kolom (header) — kamu dapat menulis list of dict langsung ke CSV dan membacanya kembali sebagai list of dict.
Data dunia nyata sebagian besar adalah CSV dengan baris header, jadi di proyek aktual kamu akan jauh lebih sering menggunakan ini.
Mengapa DictWriter / DictReader bergunaDictWriter mengubah list of dict menjadi CSV dengan baris header yang ditentukan oleh fieldnames. DictReader kebalikannya — membaca CSV dengan baris header sebagai list of dict, jadi kamu dapat mengakses nilai berdasarkan nama kolom seperti row["name"].
Tulis list-of-dict pengguna ke users.csv, lalu baca kembali dan cetak setiap baris dengan format. Coba membaca berdasarkan nama kolom alih-alih posisi.
① Import csv.
② Buat list dua pengguna (3 kolom: name / age / city).
- Pertama: name="Budi", age=30, city="Tokyo"
- Kedua: name="Siti", age=25, city="Osaka"
③ Buka users.csv dalam mode tulis, buat DictWriter, dan tulis header + baris data (berikan fieldnames=["name", "age", "city"]).
④ Buka kembali file dan buat DictReader, lalu cetak setiap baris dalam format {name} ({age} tahun) {city}.
Python Editor
Jalankan kode untuk melihat output
Contoh Dunia Nyata: Agregasi titanic.csv
Sejauh ini kita membuat dataset kecil di kode dan menulisnya keluar. Mari akhiri dengan membaca dataset nyata dan mengagregasinya. Subjeknya adalah dataset Titanic terkenal di Kaggle (891 baris / 12 kolom), dengan kolom seperti PassengerId / Survived (0 = meninggal, 1 = selamat) / Pclass (kelas kabin) / Name / Sex / Age / Fare.
python_console untuk latihan memuat CSV eksternal ke virtual filesystem (VFS) in-browser via fileUrls, jadi kode kamu cukup memanggil open("titanic.csv"). Kita akan menulis tugas yang sama dengan csv.reader (positional) dan csv.DictReader (berdasarkan nama kolom).
Pakai csv.reader positional untuk membaca titanic.csv dan menghitung total penumpang dan jumlah yang selamat.
① Import modul csv.
② Buka titanic.csv dalam mode baca (dengan newline='') dan buat reader.
③ Lewati baris header dengan next(reader).
④ Loop sisanya dengan for row in reader: dan hitung total dan survived (baris di mana kolom Survived = indeks 1 adalah "1").
⑤ Cetak Total: 891 dan Selamat: 342.
Python Editor
Jalankan kode untuk melihat output
Pakai csv.DictReader berbasis nama kolom untuk membaca titanic.csv dan menghitung rata-rata kolom Age. Data Titanic punya baris di mana Age kosong, jadi kita akan menanganinya juga.
① Import csv.
② Buka titanic.csv dalam mode baca (dengan newline='') dan buat DictReader.
③ Di dalam loop, ambil row["Age"] dari setiap baris dan kumpulkan hanya yang tidak kosong dengan float(row["Age"]) ke list.
④ Cetak jumlah baris valid dan rata-rata umur (2 desimal) seperti ini:
- Data valid: ◯ (diharapkan: 714)
- Rata-rata umur: ◯◯.◯◯ (diharapkan: 29.70)
Python Editor
Jalankan kode untuk melihat output
QUIZ
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 1Apa yang dimuat dalam output json.dumps({"name": "café"}, ensure_ascii=False)?
Soal 2Apa tipe nilai yang dikembalikan saat membaca baris kembali dengan csv.reader?
Soal 3Apa yang paling cocok untuk membaca CSV dengan baris header sebagai list of dict?