Lewati ke konten
Puguh Sulistyo Pambudi Freelance Web Developer | Guru SMK
  • Beranda
  • Profil Saya
  • Belajar
    • Vibecoding
    • Kecerdasan Buatan
    • Koding
    • Python
    • WordPress
    • Internet of Things
Cari

Tekan Enter untuk melihat semua hasil · Esc untuk menutup

Beranda / Python / File — Simpan Data Siswa ke Dokumen agar Tidak Hilang!
Python

File — Simpan Data Siswa ke Dokumen agar Tidak Hilang!

Puguh Sulistyo Pambudi
Puguh Sulistyo Pambudi Mei 21, 2026 · 11 menit baca · 2
File — Simpan Data Siswa ke Dokumen agar Tidak Hilang!
Daftar Isi
  1. 1 Kenapa File Itu Penting?
  2. 2 Konsep Dasar: Program ↔ File
  3. 3 Menulis File — Simpan Data ke Disk
  4. Menulis Banyak Baris Sekaligus
  5. 4 Membaca File — Ambil Data dari Disk
  6. Menangani File yang Belum Ada
  7. 5 Mode Append — Tambah Tanpa Hapus
  8. 6 Format CSV — Data yang Bisa Dibuka di Excel
  9. Menulis CSV
  10. Membaca CSV dengan DictReader
  11. 7 Studi Kasus: Sistem Nilai Permanen
  12. 8 Tips Praktis File di Python
  13. 9 Latihan: Buku Nilai Harian Sederhana
  14. 10 Rangkuman
  15. 11 Artikel Selanjutnya

Ada satu masalah besar yang mungkin belum kamu sadari dari semua program yang kita buat selama ini: semua data hilang begitu program ditutup.

Kamu menginput nilai 32 siswa dengan susah payah — lalu program ditutup — dan data itu lenyap selamanya. Besok kamu harus input ulang dari awal. Tidak praktis sama sekali.

Inilah yang akan kita selesaikan di artikel ini. Kita akan belajar cara Python membaca dan menulis file — sehingga data yang kita simpan bisa bertahan permanen di hard disk, dibuka kapanpun dibutuhkan, bahkan bisa langsung dilihat di Notepad atau Microsoft Excel.

Kenapa File Itu Penting?

Bayangkan skenario ini: Bu Halimah wali kelas X IPS 2 baru saja selesai menginput nilai 36 siswa ke program Python. Programnya berjalan sempurna — tampil semua dengan rapi. Tapi kemudian listrik padam. Program tertutup paksa. Semua data yang baru saja diinput hilang total karena hanya tersimpan di RAM.

Dengan file, skenario ini tidak akan terjadi. Data ditulis ke hard disk, dan hard disk menyimpan data meski listrik mati sekalipun.

Konsep Dasar: Program ↔ File

Sebelum ke kode, pahami dulu konsep dasarnya:

program file python

Saat kamu bekerja dengan file di Python, ada tiga operasi utama:

ModeSimbolFungsiCatatan
Write"w"Tulis/buat file baru⚠️ Menimpa file lama jika ada
Read"r"Baca isi fileFile harus sudah ada
Append"a"Tambah di akhir fileTidak menghapus isi lama

Menulis File — Simpan Data ke Disk

Cara paling umum membuka file di Python adalah menggunakan with open() — disebut juga context manager. Kelebihannya: file otomatis ditutup dengan benar setelah selesai dipakai, meski terjadi error di tengah jalan.

# Menulis file teks sederhana
with open("nilai_siswa.txt", "w") as file:
    file.write("Nama: Andi Saputra\n")
    file.write("Nilai: 85.5\n")
    file.write("Status: Lulus\n")

print("Data berhasil disimpan!")

Setelah kode ini dijalankan, akan muncul file baru bernama nilai_siswa.txt di folder yang sama dengan programmu. Coba buka di Notepad — isinya persis seperti yang kamu tulis!

💡 \n adalah karakter baris baru. Tanpanya, semua teks akan ditulis dalam satu baris panjang yang tidak terbaca. Selalu tambahkan \n di akhir setiap baris yang ingin dipisah.

Menulis Banyak Baris Sekaligus

Kalau kamu punya banyak baris, gunakan writelines() dengan list:

nama_siswa = ["Andi Saputra", "Budi Santoso", "Citra Dewi", "Deni Pratama"]

with open("daftar_siswa.txt", "w") as file:
    for i, nama in enumerate(nama_siswa, start=1):
        file.write(f"{i}. {nama}\n")

print(f"✅ {len(nama_siswa)} nama berhasil disimpan ke daftar_siswa.txt")

Hasil file daftar_siswa.txt:

1. Andi Saputra
2. Budi Santoso
3. Citra Dewi
4. Deni Pratama

Membaca File — Ambil Data dari Disk

Ada tiga cara membaca file, masing-masing cocok untuk situasi berbeda:

# CARA 1: read() — baca semua sekaligus jadi satu string
with open("daftar_siswa.txt", "r") as file:
    semua_isi = file.read()
    print(semua_isi)

# CARA 2: readlines() — baca semua, simpan sebagai list baris
with open("daftar_siswa.txt", "r") as file:
    daftar_baris = file.readlines()
    for baris in daftar_baris:
        print(baris.strip())    # .strip() hapus \n di akhir baris

# CARA 3: Iterasi langsung — paling efisien untuk file besar
with open("daftar_siswa.txt", "r") as file:
    for baris in file:
        print(baris.strip())

Untuk file kecil (data kelas), ketiga cara sama baiknya. Untuk file sangat besar (data seluruh sekolah), Cara 3 lebih hemat memori karena membaca satu baris setiap kali, bukan langsung semuanya.

Menangani File yang Belum Ada

Kalau kamu mencoba membaca file yang belum ada, Python akan langsung error FileNotFoundError. Selalu tambahkan penanganan error:

nama_file = "nilai_siswa.txt"

try:
    with open(nama_file, "r") as file:
        isi = file.read()
        print(isi)
except FileNotFoundError:
    print(f"❌ File '{nama_file}' tidak ditemukan.")
    print("   Pastikan nama file sudah benar dan ada di folder yang sama.")

Kita akan belajar try-except lebih dalam di artikel berikutnya — tapi pola ini penting untuk dipakai sekarang agar program tidak crash saat file tidak ada.

Mode Append — Tambah Tanpa Hapus

Mode "a" (append) sangat berguna untuk data yang terus bertambah, seperti log absensi harian. Setiap kali program dijalankan, data baru ditambahkan di akhir file — tidak pernah menghapus yang sudah ada.

Mode Append
from datetime import date

def catat_kehadiran(nama_siswa_hadir):
    """Tambahkan data kehadiran hari ini ke file log."""
    hari_ini = date.today()

    with open("log_absensi.txt", "a") as file:
        file.write(f"\n=== Tanggal: {hari_ini} ===\n")
        for nama in nama_siswa_hadir:
            file.write(f"{nama},HADIR\n")

    print(f"✅ Absensi {hari_ini} berhasil dicatat ({len(nama_siswa_hadir)} siswa hadir)")

# Jalankan tiap hari dengan data yang berbeda
hadir_hari_ini = ["Andi Saputra", "Citra Dewi", "Eka Fitriani"]
catat_kehadiran(hadir_hari_ini)

Setiap kali program dijalankan di hari berbeda, isi file semakin bertambah. Setelah seminggu, file log_absensi.txt akan berisi rekap kehadiran lengkap seluruh minggu.

Format CSV — Data yang Bisa Dibuka di Excel

Sejauh ini kita menyimpan teks biasa. Untuk data terstruktur seperti nilai siswa, format CSV (Comma-Separated Values) jauh lebih baik karena:

  • Bisa langsung dibuka di Microsoft Excel atau Google Sheets
  • Format standar yang dimengerti banyak aplikasi
  • Mudah dibaca dan ditulis secara otomatis oleh Python
Format CSV

Menulis CSV

import csv

# Data nilai siswa
data_nilai = [
    ["nama",  "tugas", "uts", "uas"],   # baris header
    ["Andi",  80,      85,    90],
    ["Budi",  72,      68,    75],
    ["Citra", 91,      88,    95],
    ["Deni",  65,      70,    68],
]

with open("nilai_siswa.csv", "w", newline="") as file:
    writer = csv.writer(file)
    writer.writerows(data_nilai)

print("✅ Data nilai disimpan ke nilai_siswa.csv — bisa dibuka di Excel!")

💡 newline="" pada open() perlu ditambahkan saat menulis CSV di Windows, untuk menghindari baris kosong ganda yang muncul di Excel.

Membaca CSV dengan DictReader

csv.DictReader adalah cara paling nyaman membaca CSV — setiap baris otomatis jadi dictionary dengan key dari baris pertama (header):

import csv

with open("nilai_siswa.csv", "r") as file:
    reader = csv.DictReader(file)

    print(f"{'Nama':<12} {'Tugas':>6} {'UTS':>6} {'UAS':>6} {'Akhir':>7} {'Status'}")
    print("-" * 50)

    for row in reader:
        nama  = row["nama"]
        tugas = float(row["tugas"])
        uts   = float(row["uts"])
        uas   = float(row["uas"])

        nilai_akhir = (tugas * 0.30) + (uts * 0.35) + (uas * 0.35)
        status = "Lulus ✅" if nilai_akhir >= 75 else "Remedi ⚠️"

        print(f"{nama:<12} {tugas:>6.0f} {uts:>6.0f} {uas:>6.0f} {nilai_akhir:>7.2f} {status}")

Output:

Nama          Tugas    UTS    UAS   Akhir Status
--------------------------------------------------
Andi          80     85     90    85.25 Lulus ✅
Budi          72     68     75    71.80 Remedi ⚠️
Citra         91     88     95    91.23 Lulus ✅
Deni          65     70     68    67.55 Remedi ⚠️

⚠️ Perhatikan: Data dari CSV selalu berupa string! Angka "80" bukan sama dengan angka 80. Selalu konversi dengan float() atau int() sebelum melakukan kalkulasi.

Studi Kasus: Sistem Nilai Permanen

Sekarang kita gabungkan semua yang sudah dipelajari — fungsi (artikel #8) dan file — untuk membuat sistem nilai yang datanya benar-benar tersimpan permanen.

Bu Halimah akhirnya tidak perlu khawatir listrik padam lagi!

# ============================================================
# Sistem Nilai Permanen — Bu Halimah, Wali Kelas X IPS 2
# Data tersimpan ke CSV, bisa dibuka lagi kapanpun
# ============================================================
import csv
import os
from datetime import date

NAMA_FILE = "nilai_x_ips2.csv"
HEADER    = ["nis", "nama", "tugas", "uts", "uas", "nilai_akhir", "predikat", "tanggal_input"]


# ── Fungsi-Fungsi Pendukung ──────────────────────────────────

def hitung_nilai_akhir(tugas, uts, uas):
    return round((tugas * 0.30) + (uts * 0.35) + (uas * 0.35), 2)

def tentukan_predikat(nilai):
    if nilai >= 90: return "A"
    elif nilai >= 80: return "B"
    elif nilai >= 70: return "C"
    elif nilai >= 60: return "D"
    else: return "E"

def inisialisasi_file():
    """Buat file CSV baru dengan header jika belum ada."""
    if not os.path.exists(NAMA_FILE):
        with open(NAMA_FILE, "w", newline="") as f:
            csv.writer(f).writerow(HEADER)
        print(f"📄 File '{NAMA_FILE}' berhasil dibuat.")

def simpan_nilai_siswa(data_siswa):
    """Tambahkan satu baris data siswa ke CSV."""
    with open(NAMA_FILE, "a", newline="") as f:
        csv.writer(f).writerow(data_siswa)

def baca_semua_nilai():
    """Baca dan kembalikan semua data dari CSV."""
    try:
        with open(NAMA_FILE, "r") as f:
            return list(csv.DictReader(f))
    except FileNotFoundError:
        return []

def tampilkan_semua_nilai():
    """Tampilkan semua data nilai dalam format tabel."""
    data = baca_semua_nilai()
    if not data:
        print("⚠️  Belum ada data nilai tersimpan.")
        return

    print(f"\n{'='*70}")
    print(f"{'REKAP NILAI KELAS X IPS 2 — SMK Nusantara':^70}")
    print(f"{'='*70}")
    print(f"  {'NIS':<10} {'Nama':<20} {'Tugas':>5} {'UTS':>5} {'UAS':>5} {'Akhir':>6} {'Pred':>4}")
    print(f"  {'-'*64}")

    for row in data:
        print(f"  {row['nis']:<10} {row['nama']:<20} "
              f"{float(row['tugas']):>5.0f} {float(row['uts']):>5.0f} "
              f"{float(row['uas']):>5.0f} {float(row['nilai_akhir']):>6.2f} "
              f"{row['predikat']:>4}")

    semua_akhir = [float(r["nilai_akhir"]) for r in data]
    rata = sum(semua_akhir) / len(semua_akhir)
    lulus = sum(1 for n in semua_akhir if n >= 75)

    print(f"  {'='*64}")
    print(f"  Total: {len(data)} siswa  |  Rata-rata: {rata:.2f}  |  Lulus: {lulus}  |  Remedi: {len(data)-lulus}")
    print(f"{'='*70}")

def input_nilai_siswa():
    """Input dan simpan data nilai siswa baru."""
    print("\n--- Input Nilai Siswa Baru ---")
    nis  = input("NIS       : ").strip()
    nama = input("Nama      : ").strip().title()

    def input_nilai(label):
        while True:
            try:
                n = float(input(f"{label} (0-100): "))
                if 0 <= n <= 100: return n
                print("  ❌ Nilai harus 0-100!")
            except ValueError:
                print("  ❌ Masukkan angka!")

    tugas = input_nilai("Nilai Tugas")
    uts   = input_nilai("Nilai UTS  ")
    uas   = input_nilai("Nilai UAS  ")

    nilai_akhir = hitung_nilai_akhir(tugas, uts, uas)
    predikat    = tentukan_predikat(nilai_akhir)
    tgl_input   = date.today()

    data_baris = [nis, nama, tugas, uts, uas, nilai_akhir, predikat, tgl_input]
    simpan_nilai_siswa(data_baris)

    print(f"\n✅ Data {nama} berhasil disimpan!")
    print(f"   Nilai akhir: {nilai_akhir} | Predikat: {predikat}")


# ── Program Utama ─────────────────────────────────────────────

inisialisasi_file()

print("╔══════════════════════════════════════════╗")
print("║   SISTEM NILAI PERMANEN — BU HALIMAH    ║")
print("║    Kelas X IPS 2 — SMK Nusantara 2025  ║")
print("╚══════════════════════════════════════════╝")

while True:
    print("\n[1] Input nilai siswa baru")
    print("[2] Tampilkan semua nilai")
    print("[3] Keluar")

    pilihan = input("\nPilih menu [1-3]: ").strip()

    if pilihan == "1":
        input_nilai_siswa()
    elif pilihan == "2":
        tampilkan_semua_nilai()
    elif pilihan == "3":
        print(f"\n✅ Data tersimpan aman di '{NAMA_FILE}'. Sampai jumpa!")
        break
    else:
        print("❌ Pilihan tidak valid.")

Program ini menggabungkan hampir semua yang sudah kita pelajari:

  • Fungsi dari artikel #8 — setiap tugas punya fungsinya sendiri
  • Dictionary dari artikel #7 — DictReader memberi akses data dengan nama kolom
  • List dari artikel #6 — kumpulkan semua nilai untuk hitung rata-rata
  • If-elif-else dari artikel #4 — penentu predikat
  • Loop while dari artikel #5 — menu terus tampil sampai pilih keluar
  • File CSV — inti artikel ini, data tersimpan permanen

Dan yang paling penting: setiap kali program ini dijalankan ulang, data dari sesi sebelumnya masih ada di file CSV. Bu Halimah bisa input hari ini, besok buka program lagi, dan data kemarin masih utuh.

Tips Praktis File di Python

1. Selalu pakai with open() Pola with open() as f: memastikan file selalu ditutup dengan benar, bahkan kalau terjadi error. Ini mencegah korupsi data dan file yang “terkunci”.

2. Gunakan os.path.exists() sebelum baca

import os
if os.path.exists("data.txt"):
    # aman untuk dibaca
else:
    # buat file baru atau tampilkan pesan

3. Simpan di folder yang jelas Kalau mau simpan di folder tertentu, sertakan path-nya:

open("data/nilai/kelas_x.csv", "w")   # simpan di subfolder data/nilai/

4. Format penamaan file yang baik Pakai nama yang deskriptif dan tambahkan tanggal kalau perlu:

from datetime import date
nama_file = f"nilai_semester_{date.today().year}.csv"

Latihan: Buku Nilai Harian Sederhana

Buat file buku_nilai_harian.py. Program ini menyimpan nilai ulangan harian ke file teks, dan bisa menampilkan rekap kapanpun:

# ==========================================
# Buku Nilai Harian Sederhana
# ==========================================
import os
from datetime import date

NAMA_FILE = "nilai_harian.txt"

def catat_nilai(mapel, nama, nilai):
    """Simpan satu nilai ulangan ke file."""
    with open(NAMA_FILE, "a") as f:
        f.write(f"{date.today()}|{mapel}|{nama}|{nilai}\n")

def tampilkan_rekap(filter_mapel=None):
    """Tampilkan rekap nilai dari file."""
    if not os.path.exists(NAMA_FILE):
        print("Belum ada data nilai.")
        return

    print(f"\n{'Tanggal':<12} {'Mapel':<15} {'Nama':<20} {'Nilai':>6}")
    print("-" * 55)

    with open(NAMA_FILE, "r") as f:
        for baris in f:
            tgl, mapel, nama, nilai = baris.strip().split("|")
            if filter_mapel and mapel != filter_mapel:
                continue
            print(f"{tgl:<12} {mapel:<15} {nama:<20} {float(nilai):>6.1f}")

# ── Program ──
print("=== BUKU NILAI HARIAN ===")
while True:
    print("\n[1] Catat nilai baru  [2] Lihat semua  [3] Filter per mapel  [4] Keluar")
    pilihan = input("Pilih: ").strip()

    if pilihan == "1":
        m = input("Mata pelajaran : ")
        n = input("Nama siswa     : ").title()
        v = float(input("Nilai          : "))
        catat_nilai(m, n, v)
        print("✅ Tersimpan!")
    elif pilihan == "2":
        tampilkan_rekap()
    elif pilihan == "3":
        m = input("Filter mapel: ")
        tampilkan_rekap(filter_mapel=m)
    elif pilihan == "4":
        print("Data aman tersimpan. Sampai jumpa!")
        break

Coba jalankan program ini beberapa kali, input data berbeda setiap kali. Perhatikan bahwa data terus bertambah — tidak pernah hilang meski program ditutup dan dibuka lagi!

Rangkuman

KonsepSintaksCatatan
Buka filewith open("file.txt", mode) as f:Selalu pakai with
Tulis barumode="w"⚠️ Timpa file lama
Bacamode="r"File harus ada
Tambahmode="a"Tidak hapus isi lama
Tulis barisf.write("teks\n")Jangan lupa \n
Baca semuaf.read()Satu string panjang
Baca per barisf.readlines()List of strings
Iterasi barisfor baris in f:Hemat memori
Hapus spasi.strip()Wajib saat baca baris
Tulis CSVcsv.writer(f).writerow(data)Perlu import csv
Baca CSVcsv.DictReader(f)Otomatis jadi dict
Cek file adaos.path.exists("file")Perlu import os

Artikel Selanjutnya

Di artikel berikutnya kita belajar Error Handling — cara membuat program yang tidak langsung crash saat terjadi kesalahan. Bayangkan guru yang salah ketik huruf saat input nilai — program kita harus bisa menanganinya dengan baik, bukan langsung berhenti total!

Ada pertanyaan soal file, CSV, atau cara menyimpan data? Tulis di komentar! 💬

Artikel ini merupakan bagian dari seri “Belajar Python untuk Sekolah” — panduan coding Python bergaya santai untuk pelajar SMA/SMK/MA Indonesia.

#File Python #Python
Puguh Sulistyo Pambudi

Ditulis oleh

Puguh Sulistyo Pambudi
Bagikan
← Sebelumnya Fungsi — Bikin Kode Lebih Rapi dan Bisa Dipakai Lagi!
Selanjutnya → Mengapa Tidak Ada Satu Pun AI di Dunia yang “Paling Pintar”

Tinggalkan Balasan Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Artikel Populer

  1. Anatomi Prompt yang Efektif — 5 Komponen Kunci yang Wajib Kamu Tahu Mei 18, 2026
  2. Mengenal IoT Secara Fundamental: Inovasi Smart Farming September 24, 2026
  3. Zero-Shot, One-Shot, Few-Shot — Teknik Dasar Prompting yang Wajib Dikuasai Mei 18, 2026
  4. Role Prompting — Cara Kasih AI ‘Karakter’ yang Tepat untuk Hasil Maksimal Mei 18, 2026
  5. Chain of Thought Prompting — Cara Bikin AI Berpikir Lebih Dalam dan Akurat Mei 18, 2026

Kategori

  • Kecerdasan Buatan 16
  • Python 9
  • Koding 8
  • Vibecoding 2
  • Aplikasi Pendidikan 2
  • Wordpress 1
  • Internet of Things 1
  • Uncategorized 0

© 2026 Puguh Sulistyo Pambudi — Dibuat dengan ❤

Powered by
Necessary cookies enable essential site features like secure log-ins and consent preference adjustments. They do not store personal data.
None
Functional cookies support features like content sharing on social media, collecting feedback, and enabling third-party tools.
None
Analytical cookies track visitor interactions, providing insights on metrics like visitor count, bounce rate, and traffic sources.
None
Advertisement cookies deliver personalized ads based on your previous visits and analyze the effectiveness of ad campaigns.
None
Unclassified cookies are cookies that we are in the process of classifying, together with the providers of individual cookies.
None
Powered by