- EN
- ID
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
pathliblebih 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 dibacaos.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 -> Sertakannewline=""saat membuka CSV untuk penulisan. - Konkatenasi string path manual -> Gunakan join
pathlib.Path. - Mengabaikan exception pada akses file -> Tangani
FileNotFoundErrordan 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
withdan encoding eksplisit. - Gunakan module bawaan (
json,csv) untuk format terstruktur. pathlibadalah 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