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 Sumber
skor = [("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: 95

Coba 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.

  1. Mode untuk menambahkan teks di akhir file adalah …
  2. Apa risiko memakai mode w pada file yang sudah ada?
  3. Apa manfaat with open(…) sebagai pengelola konteks?
  4. Path relatif ditafsirkan dari …
  5. Mengapa encoding dituliskan eksplisit?
Kerjakan Kuis

Latihan Mandiri

Latihan 14-L01 – Simpan catatan

Dasar. Buat catatan_latihan.txt berisi Belajar Python dan baca kembali isinya.

Unduh Latihan

Hasil 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 Solusi

Latihan 14-L02 – Tambah satu baris

Penerapan. Buat kegiatan.txt berisi Membaca, tambahkan Mencoba dalam mode a, lalu baca semua isi.

Unduh Latihan

Hasil 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 Solusi

Latihan 14-L03 – Hitung baris berisi

Pengembangan. Buat file dengan baris Ayu, kosong, Budi. Hitung baris yang tidak kosong setelah strip.

Unduh Latihan

Hasil 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 Solusi

Pengembangan

Kegiatan Tambahan

Coba kerjakan latihan berikut untuk mengasah kemampuanmu. Setelah mencoba sendiri, kamu bisa melihat contoh solusinya di bawah.

  1. 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.

  2. Filter Kontak Misalkan kamu memiliki file kontak.txt dengan format: nama,telepon per baris (contoh: Budi,081234567890). Buat program yang membaca file kontak.txt dan hanya menampilkan daftar nama saja, tanpa nomor telepon.

  3. Catatan Harian Sederhana Buat program yang meminta pengguna menulis satu baris catatan harian. Program kemudian akan menyimpan catatan tersebut ke file diary.txt dengan 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

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.

Bab 13 | Bab 15