Belajar dengan membaca secara berurutan

json dan csv — I/O untuk Data Terstruktur

Pelajari konversi json.dumps/loads plus ensure_ascii, csv.writer/reader posisi, dan DictWriter/DictReader berbasis nama kolom via agregasi Titanic.

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?
JSONumum di web APIpasangan key/valuenesting diizinkanCSVumum di analisis data1 baris = 1 recordterbuka di spreadsheetciriciri
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.loads
objek Pythondict / list / str / numjson.dumpsstring JSON{ "name": "Budi" }string JSON{ "name": "Budi" }json.loadsobjek Pythondict / list / str / numtulisbaca
Baris 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.
FungsiPeranCatatan
json.dumps(obj)Python → string JSONmengembalikan str
json.loads(text)string JSON → Pythonmengembalikan dict / list / dll.
json.dump(obj, file)Python → tulis ke fileberikan f dari open()
json.load(file)file → Pythonberikan f dari open()
indent=Npretty-print dengan indent N spasiuntuk pembaca manusia
ensure_ascii=Falsekeluarkan non-ASCII apa adanyadefault-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.reader
list nilai["Budi", 30]csv.writerwriterowteks CSVBudi,30csv.readerfor row in readerlist nilai['Budi', '30'] (semua str)tulisbaca
writer.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 berguna
list of dict[{name: ..., age: ...}]DictWriterwriteheader+ writerowsCSV dengan headername,ageBudi,30DictReaderfor row in readerlist of dictakses row["name"]tulisbaca
DictWriter 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?