Python

Panduan Belajar Python: Penanganan File & I/O

Language

Panduan ini untuk siapa

  • Pembelajar yang membangun script untuk membaca dan menulis file nyata
  • Developer yang menangani data teks, JSON, CSV, dan binary
  • Siapa pun yang beralih dari contoh mainan ke workflow data yang praktis

Apa yang akan Anda pelajari

  • Operasi file aman menggunakan context managers (with)
  • Membaca dan menulis file teks, JSON, dan CSV
  • Perbedaan penanganan file teks dan binary
  • Mengapa pathlib lebih disarankan daripada string path manual
  • Kesalahan file I/O yang umum dan strategi penanganan yang robust

Mengapa topik ini penting

Sebagian besar script production berinteraksi dengan file: konfigurasi, log, ekspor, impor, dan laporan. I/O yang andal sangat penting untuk automation, data engineering, backend system, dan workflow testing.

Kesalahan file handling dapat merusak data atau membuat workflow crash. Panduan ini berfokus pada default yang aman agar script Anda tetap stabil dan portabel lintas sistem operasi.

Konsep inti

Selalu gunakan context manager untuk file

with memastikan file tertutup dengan benar, bahkan jika terjadi error.

with open("notes.txt", "w", encoding="utf-8") as file:
	file.write("Hello file I/O\n")

Ini menghindari file handle yang bocor dan write yang tidak lengkap.

Format terstruktur: JSON dan CSV

Gunakan module khusus alih-alih parsing string manual.

Contoh JSON:

import json

payload = {"name": "Ava", "active": True}
with open("user.json", "w", encoding="utf-8") as file:
	json.dump(payload, file, indent=2)

Contoh CSV:

import csv

rows = [["name", "score"], ["A", 80], ["B", 92]]
with open("scores.csv", "w", newline="", encoding="utf-8") as file:
	writer = csv.writer(file)
	writer.writerows(rows)

Contoh YAML (parser pihak ketiga):

import yaml

config = {"env": "dev", "debug": True}
with open("config.yaml", "w", encoding="utf-8") as file:
    yaml.safe_dump(config, file)

pathlib untuk operasi path modern

pathlib meningkatkan readability dan compatibility lintas platform.

from pathlib import Path

report_path = Path("data") / "report.txt"
report_path.parent.mkdir(parents=True, exist_ok=True)
report_path.write_text("Report generated", encoding="utf-8")

Ini lebih aman dibanding konkatenasi string untuk path.

Perbandingan cepat pathlib vs os.path:

  • pathlib: berorientasi objek dan biasanya lebih mudah dibaca
  • os.path: gaya fungsional lama, masih banyak dipakai di kode legacy

Contoh file binary:

binary_data = bytes([80, 89, 84, 72, 79, 78])

with open("sample.bin", "wb") as file:
	file.write(binary_data)

with open("sample.bin", "rb") as file:
	loaded = file.read()

print(loaded)

Expected output:

b'PYTHON'

Panduan langkah demi langkah

Langkah 1 — Baca dan tulis teks biasa dengan aman

from pathlib import Path

file_path = Path("example.txt")
file_path.write_text("line 1\nline 2\n", encoding="utf-8")

content = file_path.read_text(encoding="utf-8")
print(content)

Pola ini ringkas dan andal untuk banyak script.

Langkah 2 — Bekerja dengan data JSON

import json
from pathlib import Path

settings = {"theme": "dark", "autosave": True}
Path("settings.json").write_text(json.dumps(settings, indent=2), encoding="utf-8")

loaded = json.loads(Path("settings.json").read_text(encoding="utf-8"))
print(loaded["theme"])

Sekarang Anda memiliki persistence data terstruktur dengan kode minimal.

Langkah 3 — Tangani error I/O dengan elegan

from pathlib import Path

path = Path("missing.txt")

try:
	print(path.read_text(encoding="utf-8"))
except FileNotFoundError:
	print("File not found. Please check the path.")
except PermissionError:
	print("Permission denied when accessing the file.")

Penanganan eksplisit memberikan kegagalan yang ramah pengguna.

Contoh praktis

Contoh 1 — Gabungkan banyak file teks menjadi satu

from pathlib import Path

source_dir = Path("logs")
output = Path("merged.log")

with output.open("w", encoding="utf-8") as out:
	for file_path in sorted(source_dir.glob("*.log")):
		out.write(file_path.read_text(encoding="utf-8"))
		out.write("\n")

print("Merged completed")

Expected output:

Merged completed

Contoh 2 — Baca CSV dan hitung rata-rata

import csv

total = 0
count = 0

with open("scores.csv", "r", encoding="utf-8") as file:
	reader = csv.DictReader(file)
	for row in reader:
		total += int(row["score"])
		count += 1

print(total / count if count else 0)

Expected output (sample):

86.0

Contoh CSV/Excel dengan pandas:

import pandas as pd

df = pd.read_csv("scores.csv")
df.to_excel("scores.xlsx", index=False)
print(df.head())

Kesalahan umum dan cara menghindarinya

  • Lupa encoding untuk file teks -> Gunakan encoding="utf-8" secara eksplisit.
  • Menulis CSV tanpa newline="" di Windows -> Sertakan newline="" saat membuka CSV untuk penulisan.
  • Konkatenasi string path manual -> Gunakan join pathlib.Path.
  • Mengabaikan exception pada akses file -> Tangani FileNotFoundError dan permission error.

Latihan cepat

  • Tulis script yang membaca file teks dan mencetak jumlah baris + jumlah kata.
  • Buat file konfigurasi JSON, muat kembali, lalu cetak satu key tertentu.
  • Bangun CSV reader yang mencetak min, max, dan average untuk satu kolom numerik.

Ringkasan utama

  • File handling yang aman bergantung pada blok with dan encoding eksplisit.
  • Gunakan module bawaan (json, csv) untuk format terstruktur.
  • pathlib adalah API path yang disarankan untuk project Python modern.
  • Script yang robust menangani kegagalan I/O secara prediktif.

Langkah berikutnya

Lanjut ke Testing di Python. Di panduan berikutnya, Anda akan mempelajari cara memverifikasi perilaku kode dengan unittest, pytest, dan tooling coverage.

No Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.