File CSV adalah bahasa persekutuan antar aplikasi: hasil ekspor mesin kasir, laporan spreadsheet, dan unduhan data sistem besar sering tiba dalam format ini. Membacanya di Python memang mudah, tetapi data nyata hampir selalu menyimpan kejutan — tanggal yang tidak konsisten, angka yang rusak, kolom yang luput terisi. Pada proyek ini kita membangun pengolah file CSV: alat baris perintah yang membaca data penjualan, memvalidasi setiap baris, meringkasnya menjadi laporan, lalu menuliskan hasil olahan ke berkas keluaran.
Studi kasus kita adalah laporan penjualan harian sebuah kedai kopi. Satu baris merekam satu transaksi dengan lima kolom: tanggal, produk, kategori, jumlah, dan harga. Dari data sesederhana ini, alat yang kita bangun akan menjawab pertanyaan yang benar-benar dipakai pemilik usaha: berapa omzet hari itu, kategori mana yang menopang pendapatan, produk apa yang paling laris, dan baris mana yang tidak bisa dipercaya.
Perilaku yang Diharapkan #
Hasil akhir proyek adalah satu program main.py yang dipanggil dengan nama berkas CSV sebagai argumen. Contoh sesi pemakaian berikut menunjukkan perilaku akhir yang ingin kita capai:
python3 main.py sample.csvOutput yang Dihasilkan:
Baris valid : 9
Baris tidak valid : 4
Hasil ditulis ke : ringkasan.csv, laporan.txtProgram menuliskan dua berkas keluaran. ringkasan.csv berisi agregasi per kategori dalam format yang bisa dibaca program lain, sedangkan laporan.txt adalah laporan siap baca untuk manusia:
LAPORAN PENJUALAN
=================
Total baris : 13
Baris valid : 9
Baris tidak valid : 4
Total omzet : Rp311,000
Rata-rata transaksi: Rp34,555.56
Transaksi tertinggi: 2025-06-06 Kopi Hitam (Rp60,000)
Produk terlaris : Es Teh Manis (8 item)
OMZET PER KATEGORI
------------------
Kategori Transaksi Jumlah Omzet
Minuman 6 21 234,000
Makanan 2 3 49,000
Camilan 1 2 28,000
BARIS DILEWATI
--------------
- baris 5: tanggal tidak berformat YYYY-MM-DD
- baris 9: nilai jumlah harus lebih besar dari 0
- baris 11: kolom produk kosong
- baris 14: kolom harga kosongKontrak Data #
Module csv menyerahkan seluruh nilai sebagai string. Konversi ke tipe yang benar beserta pemeriksaannya menjadi tanggung jawab program kita, dan itulah inti proyek ini. Kontrak setiap kolom dirangkum pada tabel berikut:
| Kolom | Tipe akhir | Aturan |
|---|---|---|
tanggal | str → datetime | wajib terisi, format YYYY-MM-DD |
produk | str | wajib terisi |
kategori | str | wajib terisi |
jumlah | str → int | wajib terisi, angka bulat lebih besar dari 0 |
harga | str → int | wajib terisi, angka bulat lebih besar dari 0 |
Baris yang melanggar salah satu aturan tidak membatalkan seluruh analisis. Program mencatat pelanggaran sebagai laporan galat dengan nomor baris fisik berkas, lalu melanjutkan analisis pada baris yang valid.
Prasyarat #
Sebelum mulai, pastikan materi berikut sudah dikuasai:
- Membaca dan Menulis CSV — API dasar module
csvdi sisi baca dan tulis. - Membaca Data CSV — alur kerja
DictReaderpada data nyata. - f-strings — perataan kolom dan pemisah ribuan untuk keluaran tabel.
- Dictionary — pola akumulasi untuk pengelompokan data.
- Parsing dan Formatting datetime — validasi format tanggal dengan
strptime. - Menulis Test dengan pytest — fixture, assertion, dan test berparameter untuk Bagian 4.
Tahapan Pengerjaan #
Proyek dikerjakan dalam empat bagian berurutan, dan setiap bagian menghasilkan program yang benar-benar berjalan:
- Bagian 1: Membaca Data CSV — membaca
sample.csvdenganDictReader, mengonversi tipe, dan mencetak tabel omzet yang rapi. - Bagian 2: Memvalidasi Data — memeriksa setiap baris terhadap kontrak data, mengumpulkan laporan galat, dan tetap memproses baris valid.
- Bagian 3: Mengolah dan Meringkas Data — agregasi omzet per kategori, produk terlaris, dan transaksi tertinggi dalam laporan terformat.
- Bagian 4: Menulis Hasil dan Testing — menuliskan
ringkasan.csvdanlaporan.txt, lalu menguji fungsi inti dengan pytest.
Kode sumber setiap tahap tersedia pada bagian Berkas Sumber di bawah masing-masing halaman bagian, sehingga kondisi program selalu bisa dicocokkan. Kerjakan berurutan dari Bagian 1 karena setiap bagian dibangun di atas berkas dan konsep bagian sebelumnya.
Baca file CSV dengan DictReader, konversi tipe ke int, dan tampilkan tabel omzet yang rapi.
Buka → # Bagian 2: Memvalidasi DataValidasi setiap baris CSV, kumpulkan laporan galat, dan lanjutkan analisis pada baris yang valid.
Buka → # Bagian 3: Mengolah dan Meringkas DataAgregasi omzet per kategori, produk terlaris, dan transaksi tertinggi dalam laporan yang rapi.
Buka → # Bagian 4: Menulis Hasil dan TestingTulis ringkasan.csv dan laporan.txt, lalu lindungi logika inti dengan test pytest yang lengkap.
Buka →