Membaca dan Menulis File
Sampai sini semua data hilang begitu program selesai. Satu perintah ini mengubahnya jadi permanen.
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
| Cara | Hasil | Cocok untuk |
|---|---|---|
f.read() | Satu teks panjang | File kecil |
f.readlines() | List berisi tiap baris | Butuh semua baris sekaligus |
for baris in f: | Satu baris tiap putaran | Pilihan 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.