Membaca dan Menulis File
Buka file teks dan CSV dengan with-open, tulis hasil kembali. Gerbang menuju dataset beneran.
File: memori program itu sementara
Analogi singkat: variabel seperti papan tulis, semua catatan hilang saat program selesai. File seperti buku catatan: tetap ada, bisa dibuka lagi besok, bisa dikirim ke orang lain. Data analyst hidup dari file: dataset datang sebagai file (biasanya CSV), hasil analisis disimpan sebagai file. Modul ini adalah gerbang menuju dataset beneran.
Contoh 1: tulis dan baca file teks
with open("catatan.txt", "w") as f:
f.write("Baris satu
")
f.write("Baris dua
")
with open("catatan.txt", "r") as f:
isi = f.read()
print(isi)Blok with open(...) as f adalah cara standar membuka file: file otomatis ditutup setelah blok selesai, bahkan kalau error di tengah jalan. Tiga mode yang wajib hafal: w menulis (menimpa isi lama, hati-hati!), r membaca, a menambah di akhir tanpa menghapus yang lama.
Untuk file besar, jangan read() sekaligus (memori bisa jebol). Baca baris per baris:
with open("catatan.txt") as f: # mode default adalah "r"
for baris in f:
print(baris.strip())Contoh 2 (realistis): tulis CSV, baca, hitung, simpan rekap
CSV adalah format data sejuta umat: teks biasa dengan koma sebagai pemisah kolom. Modul csv bawaan Python menanganinya rapi, termasuk kasus rumit seperti koma di dalam teks.
import csv
# 1. Tulis dataset kecil
with open("penjualan.csv", "w", newline="") as f:
w = csv.writer(f)
w.writerow(["produk", "jumlah", "harga"])
w.writerow(["Kopi", 10, 15000])
w.writerow(["Teh", 7, 8000])
# 2. Baca sebagai dictionary per baris, hitung omzet
omzet = 0
with open("penjualan.csv") as f:
for baris in csv.DictReader(f):
omzet += int(baris["jumlah"]) * int(baris["harga"])
# 3. Simpan hasilnya ke file rekap
with open("rekap.txt", "w") as f:
f.write(f"Total omzet: Rp{omzet:,}
")
print("Rekap tersimpan. Omzet:", omzet)Tiga tahap ini (baca, olah, simpan) adalah inti ETL (Extract, Transform, Load) versi mini, pola yang sama dipakai pipeline data profesional. Dua detail penting: csv.DictReader memakai baris header sebagai kunci dictionary, dan semua nilainya masih string ("10" bukan 10), jadi konversi dengan int() sebelum dihitung.
Catatan teknis: Parameter
newline=""saat menulis CSV mencegah baris kosong ganda di Windows. Detail kecil yang menyelamatkan dari file CSV "berlubang" yang membingungkan. Nantipd.read_csv()melakukan semua ini otomatis, tapi memahami cara manualnya bikin kamu paham apa yang terjadi di balik layar.
Kesalahan umum pemula
SALAH: Membuka file tanpa with lalu lupa menutupnya.
f = open("data.txt", "w")
f.write("penting")
# file tidak ditutup: data bisa tidak tersimpan penuh!BENAR: Selalu pakai with, penutupan otomatis:
with open("data.txt", "w") as f:
f.write("penting")SALAH: Memakai mode w untuk menambah data, isi lama ikut terhapus.
with open("log.txt", "w") as f: # menimpa! log kemarin hilang
f.write("hari ini
")BENAR: Pakai mode a (append) untuk menambah:
with open("log.txt", "a") as f: # menambah di akhir, yang lama aman
f.write("hari ini
")SALAH: Menghitung nilai CSV tanpa konversi (masih string).
total = 0
for baris in csv.DictReader(f):
total += baris["jumlah"] * baris["harga"] # TypeError!BENAR: Konversi dulu ke angka:
total = 0
for baris in csv.DictReader(f):
total += int(baris["jumlah"]) * int(baris["harga"])SALAH: Menulis CSV tanpa newline="", lalu muncul baris kosong di Windows.
with open("data.csv", "w") as f: # di Windows: tiap baris diselingi baris kosong
csv.writer(f).writerow(["a", "b"])BENAR:
with open("data.csv", "w", newline="") as f:
csv.writer(f).writerow(["a", "b"])Tantangan
Rekap nilai dari CSV
Buat file nilai.csv berisi header nama,nilai dan 4 baris data. Baca kembali dengan csv.DictReader, hitung rata-rata, dan tulis hasilnya ke rekap.txt dalam format "Rata-rata kelas: X".