โ† Semua pembelajaran / Python Dasar
Fase 6 ยท String, File & Error

Membaca dan Menulis File

Sampai sini semua data hilang begitu program selesai. Satu perintah ini mengubahnya jadi permanen.

Sumber asli docs.python.org Resmi Rangkuman ~5 menit baca

Intisari

  • Selalu pakai with open(...) as f: โ€” file otomatis ditutup, bahkan kalau terjadi error.
  • Mode: "r" baca (bawaan) ยท "w" tulis (menimpa isi lama!) ยท "a" tambah di akhir.
  • Selalu sertakan encoding="utf-8". Tanpa itu, teks berbahasa Indonesia bisa rusak di Windows.
  • Menyusuri file baris demi baris: for baris in f: โ€” hemat memori untuk file besar.
  • Tiap baris yang dibaca membawa karakter ganti baris di ujungnya. Bersihkan dengan .strip().

Menulis

with open("catatan.txt", "w", encoding="utf-8") as f:
    f.write("Baris pertama\n")
    f.write("Baris kedua\n")

File dibuat kalau belum ada, dan ditutup otomatis saat blok with selesai.

Mode "w" menghapus seluruh isi lama tanpa bertanya. Kalau maksudmu menambahkan data ke file yang sudah ada, pakai "a". Kesalahan ini biasanya baru disadari setelah datanya hilang.

with open("log.txt", "a", encoding="utf-8") as f:
    f.write("Pengguna login\n")     # ditambahkan di akhir, isi lama aman

write() tidak menambahkan baris baru sendiri โ€” \n harus kamu tulis.

Membaca

with open("catatan.txt", "r", encoding="utf-8") as f:
    isi = f.read()          # seluruh file jadi satu teks

print(isi)

Untuk file besar, baca baris demi baris supaya tidak semuanya masuk ke memori:

with open("catatan.txt", encoding="utf-8") as f:
    for baris in f:
        print(baris.strip())      # strip membuang \n di ujung
CaraHasilCocok untuk
f.read()Satu teks panjangFile kecil
f.readlines()List berisi tiap barisButuh semua baris sekaligus
for baris in f:Satu baris tiap putaranPilihan default

Kenapa harus with

# Cara lama โ€” kalau ada error di tengah, file tidak pernah tertutup
f = open("data.txt")
isi = f.read()
f.close()

# Cara yang dipakai sekarang โ€” penutupan dijamin
with open("data.txt", encoding="utf-8") as f:
    isi = f.read()

File yang tidak ditutup bisa membuat datanya belum benar-benar tersimpan ke disk. with menghilangkan seluruh kelas masalah itu.

File yang tidak ada

with open("tidakada.txt") as f:
    ...
# FileNotFoundError: [Errno 2] No such file or directory: 'tidakada.txt'

Dua cara menanganinya โ€” yang kedua dibahas lengkap di materi berikutnya:

from pathlib import Path

if Path("data.txt").exists():
    with open("data.txt", encoding="utf-8") as f:
        isi = f.read()
else:
    isi = ""

# Atau:
try:
    with open("data.txt", encoding="utf-8") as f:
        isi = f.read()
except FileNotFoundError:
    isi = ""

Soal encoding

encoding="utf-8" memberi tahu Python cara menerjemahkan byte di file jadi huruf. Tanpa itu, Python memakai bawaan sistem โ€” yang di Windows sering bukan UTF-8, sehingga huruf beraksen dan emoji berubah jadi karakter aneh atau memicu UnicodeDecodeError. Tulis saja selalu; tidak ada ruginya.

Contoh utuh: daftar tugas yang tersimpan

FILE = "tugas.txt"

def muat():
    """Baca daftar tugas dari file; kembalikan list kosong kalau belum ada."""
    try:
        with open(FILE, encoding="utf-8") as f:
            return [b.strip() for b in f if b.strip()]
    except FileNotFoundError:
        return []

def simpan(daftar):
    """Tulis ulang seluruh daftar tugas ke file."""
    with open(FILE, "w", encoding="utf-8") as f:
        for t in daftar:
            f.write(t + "\n")

tugas = muat()
tugas.append(input("Tugas baru: "))
simpan(tugas)

print(f"Sekarang ada {len(tugas)} tugas.")

Jalankan beberapa kali โ€” datanya bertahan di antara jalan. Itu perbedaan besar antara latihan dan program yang berguna.

Latihan: buat buku catatan sederhana. Setiap catatan ditambahkan ke file dengan mode "a" beserta tanggalnya, dan ada menu untuk menampilkan semua catatan yang tersimpan.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.