Hari 21: File I/O — Baca & Tulis File
60 min
Last updated 26 Mar 2026
Membuka & Menutup File
# Cara lama (harus tutup manual)
f = open("data.txt", "r")
isi = f.read()
f.close()
# Cara modern — with statement (DIREKOMENDASIKAN)
# File otomatis ditutup walau ada error
with open("data.txt", "r") as f:
isi = f.read()
Mode Pembukaan File
| Mode | Keterangan |
|---|---|
r | Read — default, error jika tidak ada |
w | Write — buat baru / timpa jika ada |
a | Append — tambah di akhir |
x | Exclusive create — error jika sudah ada |
r+ | Read + Write |
b | Binary mode (rb, wb, dll) |
Membaca File
with open("siswa.txt", "r", encoding="utf-8") as f:
# Baca semua sekaligus
semua = f.read()
# Baca per baris (list)
f.seek(0)
baris_list = f.readlines()
# Iterasi baris per baris (hemat memori)
f.seek(0)
for baris in f:
print(baris.strip())
Menulis File
# Tulis teks
with open("output.txt", "w", encoding="utf-8") as f:
f.write("Baris pertama\n")
f.write("Baris kedua\n")
# Tulis list sekaligus
baris = ["Ana: 90\n", "Budi: 85\n", "Citra: 92\n"]
with open("nilai.txt", "w") as f:
f.writelines(baris)
# Append — tambah di akhir
with open("log.txt", "a") as f:
f.write("2026-01-01 Login berhasil\n")
File JSON
import json
# Tulis JSON
data = {
"nama": "Budi",
"nilai": [85, 90, 78],
"aktif": True
}
with open("data.json", "w") as f:
json.dump(data, f, indent=2)
# Baca JSON
with open("data.json", "r") as f:
data_baca = json.load(f)
print(data_baca["nama"]) # Budi
# String ↔ JSON
json_str = json.dumps(data) # dict → string
data_dict = json.loads(json_str) # string → dict
File CSV
import csv
# Tulis CSV
mahasiswa = [
["Nama", "NIM", "IPK"],
["Budi", "A001", "3.75"],
["Ani", "A002", "3.50"],
]
with open("mhs.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(mahasiswa)
# Baca CSV
with open("mhs.csv", "r") as f:
reader = csv.DictReader(f)
for row in reader:
print(f"{row['Nama']}: IPK {row['IPK']}")Assignment
Buat program yang: (1) menyimpan daftar kontak (nama, telepon, email) ke file JSON, (2) membacanya kembali, (3) menambahkan kontak baru, dan (4) mencari kontak berdasarkan nama.
Expected output:
Kontak Budi Santoso ditambahkan.
Kontak Ani Wijaya ditambahkan.
Kontak Budi Kurniawan ditambahkan.
Cari 'Budi':
Budi Santoso — 081234567890 — budi@email.com
Budi Kurniawan — 082111222333 — budik@email.com
PY
main.py
Solution
Output