Pendamping Bab 14: Membaca dan Menyimpan Data ke File. Gunakan nomor contoh dan latihan yang sama dengan buku.
Tujuan Belajar
- Memilih mode baca, tulis, dan tambah.
- Menggunakan with untuk mengelola file.
- Menyimpan dan memuat data teks dengan encoding yang jelas.
Persiapan
Gunakan folder latihan khusus di komputer. Contoh bab ini membuat file teks; mode w mengganti isi file yang sama. Unduhan pendamping menyediakan sumber agar langkah dapat diulang dengan data latihan.
Program dengan tombol Coba di IDE dapat dijalankan di browser. Untuk program lokal, unduh sumber, ekstrak ZIP, lalu ikuti README.txt.
Pembahasan
Ikuti pembahasan pada buku, lalu gunakan kegiatan dan materi pendamping berikut untuk memeriksa pemahaman.
Studi Kasus
14-01 – Menyimpan skor permainan
Setiap skor ditulis sebagai satu baris. Contoh sederhana ini menganggap nama tidak mengandung koma; format CSV atau JSON lebih sesuai jika data berkembang.
Unduh Sumberskor = [("Ayu", 80), ("Budi", 95)]
with open("skor_latihan.txt", "w", encoding="utf-8") as f:
for nama, nilai in skor:
f.write(f"{nama},{nilai}\n")
with open("skor_latihan.txt", encoding="utf-8") as f:
for baris in f:
nama, nilai = baris.strip().split(",")
print(f"{nama}: {nilai}")
Hasil yang diharapkan:
Ayu: 80
Budi: 95Coba ubah: Tambahkan satu skor baru pada list, jalankan ulang, lalu periksa file.
Rangkuman
Mode r membaca, w menulis ulang, dan a menambahkan. with menutup file setelah blok selesai. Tentukan encoding UTF-8 untuk teks dan perhatikan lokasi file.
Cek Pemahaman
Lima pertanyaan ini sama dengan pertanyaan di buku. Periksa jawaban di kuis untuk melihat skor dan pembahasan.
- Mode untuk menambahkan teks di akhir file adalah …
- Apa risiko memakai mode w pada file yang sudah ada?
- Apa manfaat with open(…) sebagai pengelola konteks?
- Path relatif ditafsirkan dari …
- Mengapa encoding dituliskan eksplisit?
Latihan Mandiri
Latihan 14-L01 – Simpan catatan
Dasar. Buat catatan_latihan.txt berisi Belajar Python dan baca kembali isinya.
Unduh LatihanHasil yang diharapkan:
Belajar Python
Lihat Petunjuk
Gunakan w untuk menulis, lalu buka kembali untuk membaca.
Lihat Solusi
with open("catatan_latihan.txt", "w", encoding="utf-8") as f:
f.write("Belajar Python\n")
with open("catatan_latihan.txt", encoding="utf-8") as f:
print(f.read(), end="")
Contoh dapat diulang karena file latihan ditulis ulang.
Unduh SolusiLatihan 14-L02 – Tambah satu baris
Penerapan. Buat kegiatan.txt berisi Membaca, tambahkan Mencoba dalam mode a, lalu baca semua isi.
Unduh LatihanHasil yang diharapkan:
Membaca
Mencoba
Lihat Petunjuk
Penambahan baris menggunakan mode a.
Lihat Solusi
with open("kegiatan.txt", "w", encoding="utf-8") as f:
f.write("Membaca\n")
with open("kegiatan.txt", "a", encoding="utf-8") as f:
f.write("Mencoba\n")
with open("kegiatan.txt", encoding="utf-8") as f:
print(f.read(), end="")
Baris awal tetap tersimpan setelah append.
Unduh SolusiLatihan 14-L03 – Hitung baris berisi
Pengembangan. Buat file dengan baris Ayu, kosong, Budi. Hitung baris yang tidak kosong setelah strip.
Unduh LatihanHasil yang diharapkan:
2
Lihat Petunjuk
String kosong setelah strip bernilai False.
Lihat Solusi
with open("nama_latihan.txt", "w", encoding="utf-8") as f:
f.write("Ayu\n\nBudi\n")
jumlah = 0
with open("nama_latihan.txt", encoding="utf-8") as f:
for baris in f:
if baris.strip():
jumlah += 1
print(jumlah)
Baris kosong tidak masuk hitungan.
Unduh SolusiPengembangan
Kegiatan Tambahan
Coba kerjakan latihan berikut untuk mengasah kemampuanmu. Setelah mencoba sendiri, kamu bisa melihat contoh solusinya di bawah.
Daftar Belanja Buat program yang meminta pengguna memasukkan nama barang dan harganya (misalnya “Apel, 5000”), lalu simpan ke file
belanja.txt. Tambahkan fitur untuk menampilkan semua barang yang sudah disimpan. Setiap barang baru ditambahkan ke baris baru.Filter Kontak Misalkan kamu memiliki file
kontak.txtdengan format:nama,teleponper baris (contoh:Budi,081234567890). Buat program yang membaca filekontak.txtdan hanya menampilkan daftar nama saja, tanpa nomor telepon.Catatan Harian Sederhana Buat program yang meminta pengguna menulis satu baris catatan harian. Program kemudian akan menyimpan catatan tersebut ke file
diary.txtdengan format:[YYYY-MM-DD] Catatan kamu. Setiap catatan baru ditambahkan ke baris baru di file.
Petunjuk untuk Latihan 3: Gunakan modul
datetime untuk mendapatkan tanggal:
from datetime import datetime
tanggal_sekarang = datetime.now().strftime("%Y-%m-%d")
#### Contoh: tanggal_sekarang akan berisi
#### "2023-10-27" (sesuai tanggal saat code dijalankan)
Petunjuk dan Solusi Pengembangan
Solusi Latihan
Berikut adalah contoh solusi untuk latihan di atas. Cobalah untuk memahami setiap baris codenya!
Solusi 1: Daftar Belanja
#### File: solusi_daftar_belanja.py
def tambah_barang(nama_file="belanja.txt"):
nama_barang = input("Masukkan nama barang: ")
while True:
prompt = f"Masukkan harga {nama_barang}: "
harga_barang_input = input(prompt)
if harga_barang_input.isdigit():
harga_barang = harga_barang_input
break
else:
print("Harga harus berupa angka. Coba lagi.")
with open(nama_file, "a", encoding="utf-8") as file:
# Simpan dengan format NamaBarang,HargaBarang
file.write(f"{nama_barang},{harga_barang}\n")
print(f"'{nama_barang}' seharga Rp{harga_barang}")
print("telah ditambahkan ke daftar belanja.")
def tampilkan_daftar_belanja(nama_file="belanja.txt"):
print("\n===== Daftar Belanja Saat Ini =====")
try:
with open(nama_file, "r", encoding="utf-8") as file:
ada_barang = False
for i, baris in enumerate(file):
baris_bersih = baris.strip()
# Lewati baris kosong
if not baris_bersih:
continue
# Memisahkan berdasarkan koma,
# maksimal 1 kali pemisahan dari kiri.
# Menangani jika nama barang mengandung koma
bagian = baris_bersih.split(",", 1)
if len(bagian) == 2:
nama, harga = bagian
print(f"{i + 1}. {nama}: Rp{harga}")
ada_barang = True
elif len(bagian) == 1:
# Hanya ada nama, tanpa harga
print(f"{i + 1}. {bagian[0]} (harga kosong)")
ada_barang = True
if not ada_barang:
print("Daftar belanja masih kosong.")
except FileNotFoundError:
print("Daftar belanja masih kosong")
print("(file belanja.txt belum ada).")
print("=================================")
#### Program Utama untuk Daftar Belanja
if __name__ == "__main__":
file_belanja = "belanja.txt"
while True:
print("\n--- Menu Program Daftar Belanja ---")
print("1. Tambah Barang")
print("2. Tampilkan Daftar Belanja")
print("3. Keluar")
pilihan = input("Masukkan pilihanmu (1/2/3): ")
if pilihan == '1':
tambah_barang(file_belanja)
elif pilihan == '2':
tampilkan_daftar_belanja(file_belanja)
elif pilihan == '3':
print("Terima kasih telah menggunakan")
print("program daftar belanja!")
break
else:
print("Pilihan tidak valid. Silakan coba lagi.")
#### Untuk menjalankan:
#### 1. Simpan code di atas sebagai file Python
#### (misal, solusi_daftar_belanja.py).
#### 2. Jalankan dari terminal: python solusi_daftar_belanja.py
#### 3. File belanja.txt akan dibuat/diperbarui di direktori yang sama.
Solusi 2: Filter Kontak
#### File: solusi_filter_kontak.py
#### Langkah Persiapan:
#### Buat file bernama 'kontak.txt' di direktori yang sama
#### dengan script ini. Isi file 'kontak.txt' dengan beberapa
#### baris data, contoh:
#### Budi Santoso,081234567890
#### Ani Lestari,08111222333
#### Cakra Wijaya,08555666777
#### Dewi,08777888999
def tampilkan_nama_kontak(nama_file="kontak.txt"):
print("\n===== Daftar Nama Kontak =====")
try:
with open(nama_file, "r", encoding="utf-8") as file:
ada_kontak = False
for i, baris in enumerate(file):
baris_bersih = baris.strip()
# Lewati baris kosong
if not baris_bersih:
continue
if "," not in baris_bersih:
print(f"Format baris {i + 1} tidak valid.")
continue
# Ambil bagian sebelum koma pertama sebagai nama
nama_saja, _telepon = baris_bersih.split(",", 1)
# Pastikan nama tidak kosong setelah split
if nama_saja:
print(f"{i + 1}. {nama_saja}")
ada_kontak = True
if not ada_kontak:
print("Tidak ada kontak ditemukan atau file kosong.")
except FileNotFoundError:
print(f"File '{nama_file}' tidak ditemukan.")
print("Mohon buat file dengan format 'nama,telepon'.")
print("============================")
#### Program Utama untuk Filter Kontak
if __name__ == "__main__":
file_kontak_saya = "kontak.txt"
tampilkan_nama_kontak(file_kontak_saya)
#### Untuk menjalankan:
#### 1. Buat file 'kontak.txt' seperti instruksi di atas.
#### 2. Simpan code sebagai solusi_filter_kontak.py.
#### 3. Jalankan: python solusi_filter_kontak.py
Solusi 3: Catatan Harian Sederhana
#### File: solusi_catatan_harian.py
from datetime import datetime
def tambah_catatan_harian(nama_file="diary.txt"):
prompt = "Tulis catatan harianmu (satu baris): "
catatan = input(prompt)
# Format YYYY-MM-DD
tanggal_sekarang = datetime.now().strftime("%Y-%m-%d")
with open(nama_file, "a", encoding="utf-8") as file:
file.write(f"[{tanggal_sekarang}] {catatan}\n")
print("Catatan berhasil disimpan!")
def tampilkan_semua_catatan(nama_file="diary.txt"):
print("\n===== Isi Buku Harian =====")
try:
with open(nama_file, "r", encoding="utf-8") as file:
isi_buku_harian = file.read()
# Cek apakah ada isi setelah strip whitespace
if isi_buku_harian.strip():
print(isi_buku_harian)
else:
print("Buku harian masih kosong.")
except FileNotFoundError:
print(f"Buku harian kosong (file belum ada).")
print("=========================")
#### Program Utama untuk Catatan Harian
if __name__ == "__main__":
file_buku_harian = "diary.txt"
while True:
print("\n--- Menu Catatan Harian ---")
print("1. Tulis Catatan Baru")
print("2. Lihat Semua Catatan")
print("3. Keluar")
pilihan = input("Pilihanmu (1/2/3): ")
if pilihan == '1':
tambah_catatan_harian(file_buku_harian)
elif pilihan == '2':
tampilkan_semua_catatan(file_buku_harian)
elif pilihan == '3':
print("Sampai jumpa!")
print("Jangan lupa menulis catatan lagi besok.")
break
else:
print("Pilihan tidak valid. Silakan pilih 1, 2, atau 3.")
#### Untuk menjalankan:
#### 1. Simpan code di atas sebagai file Python
#### (misal, solusi_catatan_harian.py).
#### 2. Jalankan dari terminal: python solusi_catatan_harian.py
Referensi dan Materi Pendamping
- Membaca File di Python: open() dan with
- Menulis File di Python: Mode w, a, dan write()
- with di Python: Menutup Sumber Daya Otomatis
Langkah Selanjutnya
Bab 15 membahas Menangani Error dengan try dan except. Sebelum melanjutkan, pastikan kamu dapat menjelaskan tujuan belajar dan menyelesaikan tiga latihan inti bab ini.
Edisi September 2026. Nomor contoh, pertanyaan, dan latihan digunakan bersama pada buku dan halaman ini.
