← Semua pembelajaran / Python untuk AI Engineer
Fase 1 · Sintaks & Idiom Python

pathlib — Object-oriented filesystem paths

pathlib menggantikan os.path dengan objek path yang bisa digabung pakai operator dan punya method sendiri.

Sumber asli docs.python.org Resmi Rangkuman ~5 menit baca

Intisari

  • Gabungkan path dengan operator /, bukan string concat atau os.path.join.
  • read_text() dan write_text() menghapus kebutuhan blok with open(...) untuk file kecil.
  • glob("**/*.md") menelusuri folder secara rekursif dalam satu baris.
  • mkdir(parents=True, exist_ok=True) adalah mkdir -p versi Python.
  • Objek Path bisa langsung dipakai di hampir semua fungsi stdlib yang menerima path.

Perbandingan langsung

Tugasos.path (lama)pathlib
Gabung pathos.path.join(a, b, c)Path(a) / b / c
Baca fileopen(p).read()p.read_text()
Ada tidaknyaos.path.exists(p)p.exists()
Nama fileos.path.basename(p)p.name
Folder indukos.path.dirname(p)p.parent
Ekstensios.path.splitext(p)[1]p.suffix
Buat folder bertingkatos.makedirs(p, exist_ok=True)p.mkdir(parents=True, exist_ok=True)

Membuat dan menggabung

from pathlib import Path

p = Path("data/dokumen.json")
p = Path.home() / "roadmap" / "catatan.md"
p = Path.cwd() / "output"
p = Path(__file__).parent / "template.txt"   # relatif terhadap file script ini

Operator / otomatis benar di semua OS. Di Windows ia menghasilkan \, di Linux/macOS /. Inilah alasan menyambung path dengan "data" + "/" + nama adalah bug yang menunggu terjadi.

Bagian-bagian sebuah path

p = Path("/home/budi/proyek/laporan.tar.gz")

p.name        # 'laporan.tar.gz'
p.stem        # 'laporan.tar'      ← perhatikan: hanya melepas ekstensi terakhir
p.suffix      # '.gz'
p.suffixes    # ['.tar', '.gz']
p.parent      # Path('/home/budi/proyek')
p.parents[1]  # Path('/home/budi')
p.parts       # ('/', 'home', 'budi', 'proyek', 'laporan.tar.gz')

Membaca dan menulis

isi = p.read_text(encoding="utf-8")
data = p.read_bytes()

p.write_text("halo dunia", encoding="utf-8")   # menimpa isi lama
p.write_bytes(b"\x00\x01")

# Untuk file besar, tetap pakai context manager supaya tidak masuk memori semua
with p.open(encoding="utf-8") as f:
    for baris in f:
        proses(baris)

Selalu tulis encoding="utf-8" secara eksplisit. Tanpa itu, Python memakai encoding default sistem — yang bisa berbeda antara laptop-mu dan server production, dan menghasilkan bug teks kacau yang sulit dilacak.

Memeriksa

p.exists()
p.is_file()
p.is_dir()
p.stat().st_size          # ukuran dalam byte
p.resolve()               # jadikan absolut, ikuti symlink
p.absolute()              # jadikan absolut tanpa mengikuti symlink

Menelusuri folder

for f in Path("docs").iterdir():           # isi langsung, tidak masuk subfolder
    print(f.name)

for f in Path("docs").glob("*.md"):        # satu level
    ...

for f in Path("docs").rglob("*.md"):       # rekursif — sama dengan glob("**/*.md")
    ...

# Pola ini akan sering kamu pakai di ingest pipeline RAG (Fase 7)
dokumen = [f for f in Path("docs").rglob("*") if f.suffix in {".md", ".txt", ".pdf"}]

Membuat, memindahkan, menghapus

Path("out/laporan").mkdir(parents=True, exist_ok=True)

p.rename(p.with_suffix(".bak"))       # ganti nama / pindah
p.unlink(missing_ok=True)             # hapus file
Path("kosong").rmdir()                # hapus folder (harus kosong)

import shutil
shutil.rmtree("folder_beserta_isinya")   # pathlib tidak punya ini

Mengubah bagian path

p = Path("data/laporan.json")

p.with_suffix(".csv")     # data/laporan.csv
p.with_name("ringkas.json")   # data/ringkas.json
p.with_stem("final")      # data/final.json

Interoperabilitas

Objek Path mengimplementasikan protokol os.PathLike, jadi hampir semua fungsi stdlib menerimanya langsung — tidak perlu dikonversi ke string:

import json
data = json.loads(Path("config.json").read_text(encoding="utf-8"))

import csv
with Path("data.csv").open(newline="") as f:
    for baris in csv.DictReader(f):
        ...

Kalau ada library lama yang tetap menolak, konversi dengan str(p).

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.