File dan Data · Pelajaran 5 dari 8

Rekap data CSV

10 menit baca · BelajarCode

Banyak aplikasi kasir, marketplace, dan spreadsheet bisa mengekspor data ke CSV. Dengan Python, rekap yang biasanya dikerjakan berjam-jam bisa selesai dalam hitungan detik.

Python
1import csv2from pathlib import Path34Path("penjualan.csv").write_text(5    """tanggal;produk;kategori;jumlah;harga62026-09-01;Kopi susu;Minuman;12;1500072026-09-01;Roti bakar;Makanan;5;1800082026-09-02;Kopi susu;Minuman;15;1500092026-09-02;Teh tarik;Minuman;8;12000102026-09-03;Roti bakar;Makanan;7;18000112026-09-03;Mi goreng;Makanan;4;2000012""",13    encoding="utf-8",14)1516rekap = {}17with open("penjualan.csv", encoding="utf-8", newline="") as f:18    for baris in csv.DictReader(f, delimiter=";"):19        nilai = int(baris["jumlah"]) * int(baris["harga"])20        data = rekap.setdefault(baris["produk"], {"porsi": 0, "omzet": 0})21        data["porsi"] += int(baris["jumlah"])22        data["omzet"] += nilai2324urut = sorted(rekap.items(), key=lambda p: p[1]["omzet"], reverse=True)25with open("rekap_produk.csv", "w", encoding="utf-8", newline="") as f:26    penulis = csv.writer(f, delimiter=";")27    penulis.writerow(["produk", "porsi", "omzet"])28    for produk, data in urut:29        penulis.writerow([produk, data["porsi"], data["omzet"]])3031print(Path("rekap_produk.csv").read_text(encoding="utf-8"))
Keluaran
produk;porsi;omzet
Kopi susu;27;405000
Roti bakar;12;216000
Teh tarik;8;96000
Mi goreng;4;80000
  • delimiter=";" dipakai karena file CSV dari aplikasi berbahasa Indonesia sering memakai titik koma.
  • Hasil rekap juga ditulis sebagai CSV, sehingga bisa langsung dibuka di aplikasi spreadsheet.
  • newline="" saat membuka file CSV mencegah baris kosong ganda di Windows.

Menggabungkan banyak file

Jika setiap cabang mengirim file CSV sendiri, program bisa menggabungkan semuanya:

Python
1import csv2from pathlib import Path34folder = Path("laporan_cabang")5folder.mkdir(exist_ok=True)6(folder / "cabang_bandung.csv").write_text("produk,omzet\nKopi susu,405000\nTeh tarik,96000\n", encoding="utf-8")7(folder / "cabang_malang.csv").write_text("produk,omzet\nKopi susu,310000\nRoti bakar,144000\n", encoding="utf-8")89total = {}10for berkas in sorted(folder.glob("cabang_*.csv")):11    cabang = berkas.stem.replace("cabang_", "").title()12    with open(berkas, encoding="utf-8", newline="") as f:13        for baris in csv.DictReader(f):14            total[baris["produk"]] = total.get(baris["produk"], 0) + int(baris["omzet"])15    print("Dibaca:", cabang)1617for produk, omzet in sorted(total.items(), key=lambda p: -p[1]):18    print(f"{produk:<11} Rp{omzet:>9,}".replace(",", "."))
Keluaran
Dibaca: Bandung
Dibaca: Malang
Kopi susu   Rp  715.000
Roti bakar  Rp  144.000
Teh tarik   Rp   96.000

berkas.stem adalah nama file tanpa ekstensi. Format {omzet:>9,} menambahkan pemisah ribuan dan meratakan angka ke kanan.

Excel juga bisa dibaca

Untuk file Excel (.xlsx), programmer Python biasa memakai pustaka seperti openpyxl atau pandas yang dipasang dengan pip install. Pustaka itu belum tersedia di Playground, tetapi alurnya sama: baca, olah, tulis hasilnya.

Cek pemahaman

File CSV hasil ekspor aplikasi terbaca sebagai satu kolom panjang berisi teks dengan titik koma. Apa yang paling mungkin terjadi?

Latihan

Rekap per tanggal

Dari file penjualan.csv di atas, buat rekap omzet per tanggal beserta produk terlaris (porsi terbanyak) di tanggal itu.

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi