Belajar Python File Handling

| | Python
Belajar Python File Handling

file handling memungkinkan program menyimpan dan membaca data dari file di komputer. ini penting untuk log, konfigurasi, dan penyimpanan data. konsep ini juga pengembangan dari module dan package Python, karena file sering dipakai nyimpen data yang diproses oleh module itu.

salah satu program pertama yang benar-benya berguna bagi saya adalah script python yang baca file log lalu rangkum errornya, dan itu cuma butuh open(), read(), dan write(). sejak pengalaman itu, file handling jadi salah satu kemampuan yang selalu saya seretkin ke setiap project.

1. Membuka File dengan open()

python punya built-in function open() khusus buat nyentuh file. dia butuh setidaknya nama file dan mode aksesnya:

file = open("data.txt", "r")  # r = read (baca)

Mode File

pilih mode sesuai kebutuhan. salah pilih mode sering bikin data hilang tanpa sedikit pun ada peringatan:

ModeFungsiBikin file baru?Timpa isi lama?
"r"Read (baca), defaultTidak, error kalau tidak adaTidak
"w"Write (tulis), timpa fileYaYa, dikosongkan dulu
"a"Append (tambah di akhir)YaTidak, nambah di akhir
"x"Exclusive create, gagal kalau sudah adaYa, tapi error kalau sudah adaTidak
"r+"Read + WriteTidakTidak (tulis timpa posisi kursor)
"w+"Write + ReadYaYa
"a+"Append + ReadYaTidak
"rb" / "wb"Read/Write binary (baca bytes, bukan str)Sesuai huruf depannyaSesuai huruf depannya

kalau kalian mau bikin file baru tapi tidak mau nimpa yang lama tanpa sengaja, pakai "x" lebih aman daripada "w". "w" diam-diam mengosongkan file lama.

2. Membaca File

dua cara umum baca file, dan keduanya butuh diingat untuk nutup file setelah selesai:

# Baca seluruh file (cocok file kecil, hati-hati kalau file gede)
file = open("data.txt", "r", encoding="utf-8")
isi = file.read()
file.close()
print(isi)

# Baca baris per baris (hemat memori untuk file besar)
file = open("data.txt", "r", encoding="utf-8")
for baris in file:
    print(baris.strip())
file.close()

file.read() baca semua sekaligus, enak tapi kalau file ratusan MB bisa bikin memori jebol. for baris in file baca satu baris tiap iterasi jadi lebih irit. ada juga readline() buat satu baris dan readlines() yang balikin list semua baris, tapi untuk file besar hindari readlines() karena sama aja load semua ke memori.

3. with Statement (Rekomendasi)

with otomatis nutup file setelah block selesai, jadi kalian nggak perlu panggil close() manual, ini cara teraman dan non-negotiable di codebase modern:

# Baca file
with open("data.txt", "r", encoding="utf-8") as file:
    isi = file.read()
    print(isi)
# File otomatis tertutup di sini, bahkan kalau error di dalam block

# Tulis file
with open("output.txt", "w", encoding="utf-8") as file:
    file.write("Halo Dunia!\n")
    file.write("Baris kedua\n")

tip praktik: kalau kodenya error tengah jalan, with tetap nutup file dengan benar. kalau pakai open() biasa, error bisa bikin file kekunci di Windows sampai proses kelar, atau buffer belum ke-flush jadi file setengah jadi. di review code, with open langsung kelihatan lifetime resource-nya jelas.

4. Menulis dan Append

beda mode, beda efeknya:

# Write, timpa isi file lama
with open("catatan.txt", "w", encoding="utf-8") as f:
    f.write("Catatan baru\n")

# Append, tambah di akhir (bisa bikin file baru kalau belum ada)
with open("log.txt", "a", encoding="utf-8") as f:
    f.write("2026-08-01: Aplikasi dijalankan\n")

write() nggak nambah newline otomatis, jadi simpan \n di akhir tiap baris kalo butuh. dan pakai encoding="utf-8" biar huruf indonesia aman.

5. Baca CSV Sederhana

CSV itu teks biasa dipisah koma, jadi bisa dibaca pakai split():

with open("nilai.csv", "r", encoding="utf-8") as f:
    for baris in f:
        kolom = baris.strip().split(",")
        nama, nilai = kolom[0], kolom[1]
        print(f"{nama}: {nilai}")

ini cukup buat CSV sederhana. kalau mau baca CSV yang punya field berisi koma atau kutip, pakai module bawaan csv lebih aman, dan ingat newline="" biar tidak muncul baris kosong di Windows:

import csv

with open("nilai.csv", "r", encoding="utf-8", newline="") as f:
    reader = csv.reader(f)
    for nama, nilai in reader:
        print(f"{nama}: {nilai}")

# Tulis CSV yang benar
with open("nilai_baru.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["nama", "nilai"])
    writer.writerow(["Andi", "90"])

6. Error Handling

lalu, jangan lupa tangani error, soalnya file gak ada atau permission blocked itu hal yang lumrah. di Python 3, IOError itu cuma alias dari OSError, jadi tangkap yang spesifik dulu:

try:
    with open("file_tidak_ada.txt", "r", encoding="utf-8") as f:
        print(f.read())
except FileNotFoundError:
    print("File tidak ditemukan!")
except PermissionError:
    print("Tidak punya izin akses file")
except IsADirectoryError:
    print("Itu folder, bukan file")
except UnicodeDecodeError:
    print("Encoding salah, coba utf-8 atau latin-1")
except OSError as e:
    print(f"Error OS lain: {e}")

urutan except penting, FileNotFoundError dan PermissionError itu subclass dari OSError, jadi taruh OSError paling bawah sebagai jaring pengaman. kalau kalian tangkap OSError duluan, yang spesifik tidak akan pernah kena.

7. Cek File Sebelum Baca

biasanya sebelum open(), dicek dulu apakah file benar-benar ada, soalnya error bikin program berhenti:

import os

if os.path.exists("data.txt"):
    with open("data.txt", "r", encoding="utf-8") as f:
        print(f.read())
else:
    print("File tidak ditemukan")

os.path yang punya function exists(), getsize(), isfile(), juga berguna. kalau kalian lebih suka gaya modern, pathlib juga punya Path.exists() yang sama.

tapi hati-hati, cek dulu baru buka itu ada celah race condition: file bisa kehapus di jeda antara exists() dan open(). untuk skrip yang robust, try/except FileNotFoundError lebih aman daripada if exists. pakai exists() kalau cuma buat nampilin info, pakai try kalau mau aksi beneran.

from pathlib import Path

p = Path("data.txt")
# untuk info
if p.is_file():
    print("siap dibaca")

# untuk aksi, tetap bungkus try
try:
    text = p.read_text(encoding="utf-8")
except FileNotFoundError:
    print("file hilang di tengah jalan")

8. Studi Kasus: Ringkasan Log Error

kombinasi semua di atas biasanya dipakai buat processing otomatis, seperti rangkuman error dari file log:

from datetime import datetime

with open("app.log", "r") as f:
    error_count = 0
    for baris in f:
        if "ERROR" in baris:
            error_count += 1

# Tulis laporan ringkasan ke file baru
with open("laporan.txt", "w", encoding="utf-8") as f:
    f.write(f"Tanggal: {datetime.now()}\n")
    f.write(f"Total error: {error_count}\n")

print(f"Selesai! ditemukan {error_count} error")

9. Menggunakan pathlib (Gaya Modern)

di proyek modern, pathlib sering disukai ketimbang os.path karena lebih OOP dan ngegabungin semua di satu class Path. contohnya read_text() dan write_text() yang langsung baca/tulis tanpa perlu open() manual:

from pathlib import Path

# cek keberadaan file
path = Path("data.txt")
if path.exists():
    print("file ada")
else:
    print("file belum ada")

# baca seluruh isi teks sekaligus
text = Path("data.txt").read_text(encoding="utf-8")
print(text)

# tulis langsung, otomatis ciptakan kalau belum ada, bikin folder induk jika perlu
Path("output").mkdir(parents=True, exist_ok=True)
Path("output/hasil.txt").write_text("hello dunia\n", encoding="utf-8")

Path punya method read_text(), write_text(), exists(), open(), iterdir(), glob(), parent, name, suffix, dan masih banyak lagi, jadi lebih rapi ketimbang ngabungin os.path.exists() + open() di dua baris terpisah. kalau project kalian baru, pathlib adalah pilihan yang direkomendasikan sejak python 3.4, dan gak perlu install package tambahan. pathlib juga otomatis ngurus backslash Windows, jadi path Path("logs") / "app.log" jalan di semua OS.

from pathlib import Path

# gabung path pakai operator /
base = Path.cwd() / "data" / "nilai.csv"
print(base) # /home/user/data/nilai.csv atau C:\user\data\nilai.csv

# cari semua csv
for p in Path("data").glob("*.csv"):
    print(p.name)

# baca file besar tetap pakai open biar streaming
with Path("app.log").open("r", encoding="utf-8") as f:
    for baris in f:
        if "ERROR" in baris:
            print(baris)

pro tip: Path.read_text() dan write_text() otomatis nutup file, jadi aman, tapi untuk file besar mending pake Path.open() biar nggak load semua ke memori sekaligus. dan selalu set encoding="utf-8" eksplisit, kalau tidak Python pakai default locale yang beda di tiap mesin dan bikin bug encoding susah dilacak.

Kesimpulan

  • open() buat buka file, pilih mode r baca, w tulis, a tambah, x bikin baru yang anti timpa
  • with open(..., encoding="utf-8") otomatis nutup file, aman bahkan kalau error, jangan pakai open tanpa with kecuali ada alasan kuat
  • selalu tangani error pakai try-except dengan urutan spesifik FileNotFoundError, PermissionError, IsADirectoryError, baru OSError
  • pakai encoding="utf-8" eksplisit biar huruf indonesia nggak rusak, untuk CSV tambah newline=""
  • cek os.path.exists() atau Path.exists() cuma untuk info, untuk aksi pakai try biar bebas race condition
  • untuk CSV simpel pakai split(",") cukup, yang kompleks pakai module csv dengan newline=""
  • pakai pathlib.Path untuk project baru, methodnya read_text, write_text, exists, glob, mkdir(parents=True) semua di satu tempat

Baca Juga Mengenai :

Pertanyaan yang Sering Diajukan

Apa itu file handling di Python

file handling di python ini kemampuan buat baca dan tulis file di komputer pakai modul built-in seperti open, os, dan pathlib. dipake buat nyimpen log, konfigurasi, data csv, atau file teks.

Apa perbedaan mode r, w, dan a

r berarti read (baca), mode default, kalau file gak ada langsung error. w berarti write (tulis), timpa isi file lama, kalau belum ada langsung dibuat. a berarti append (tambah), nulis di akhir file tanpa menghapus isi lama.

Kenapa harus pakai with open, apa bahayanya

with open otomatis nutup file setelah keluar block. kalau pakai open biasa dan lupa panggil close(), file bisa macet atau data numpuk di buffer, apalagi kalo error tengah jalan.

Apa gunanya encoding utf-8

utf-8 itu standar penyimpanan karakter yang dukung huruf latin, angka, emoji, hingga bahasa indonesia. pakai utf-8 cegah error karakter aneh waktu baca atau tulis file.

Cara cek file ada sebelum dibaca

pakai os.path.exists(nama_file) atau pathlib Path(nama_file).exists(), yang keduanya balikin True atau False.

Harus pakai module csv untuk baca CSV

tidak wajib, kalau format sederhana bisa pakai with open lalu split koma. tapi kalau CSV-nya kompleks karena ada koma di dalam field, pakai module csv yang built-in justru lebih aman.

Apa bedanya os.path dan pathlib

os.path itu style lama, function-based, dan path-nya string. pathlib (sejak python 3.4) pakai Path object yang punya method read_text, write_text, exists, dll. keduanya kerja, tapi pathlib lebih rapi dan direkomendasikan buat project baru.

Sigit Nurhanafi avatar
Full-stack developer & technical writer. Berpengalaman di PHP, Laravel, NodeJS, MySQL, dan Python. Aktif menulis tutorial pemrograman dan maintaining open-source projects di PemburuKode sejak 2021.