Sejauh ini kita menulis nama berkas sebagai string polos: "data/penjualan.txt". Pendekatan ini cepat rapuh — menggabungkan bagian path dengan +, mengurai ekstensi dengan split("."), dan berdoa pemisah folder (/ di Linux, \ di Windows) cocok dengan sistem operasi pembaca. Module pathlib (hadir sejak Python 3.4) menggantikan semua itu dengan class Path: object yang mewakili lokasi berkas sekaligus membawa puluhan operasi siap pakai.

Object Path dan Operator / #

Class Path mengubah string lokasi menjadi object yang bisa dirakit dan diperiksa:

python
from pathlib import Path

folder = Path("data")
berkas = folder / "penjualan" / "februari.txt"

print(berkas)
print(type(berkas))
print(berkas.parts)

Output yang Dihasilkan:

text
data/penjualan/februari.txt
<class 'pathlib.PosixPath'>
('data', 'penjualan', 'februari.txt')

Mari kita bedah hasilnya:

  1. Baris 3-4 (folder / "penjualan" / "februari.txt"): operator / yang biasa pembagian bilangan di-overload oleh Path menjadi perakit path — jauh lebih rapi daripada + "/" +.
  2. Baris 7 (print(type(berkas))): di Linux kita mendapat PosixPath, di Windows WindowsPath; keduanya anak dari Path dengan antarmuka sama, jadi kode kita tetap portabel.
  3. Baris 8 (print(berkas.parts)): attribute parts memecah path menjadi tuple komponennya — berguna untuk pemeriksaan dan iterasi.

Path yang dirakit belum menyentuh disk sama sekali; Path hanyalah nama sampai method seperti write_text() dipanggil.

Memeriksa dan Membaca Berkas Sekaligus #

Method paling sering dipakai sehari-hari: pemeriksaan keberadaan dan baca-tulis singkat:

python
from pathlib import Path

Path("arsip").mkdir(exist_ok=True)
Path("arsip/catatan.txt").write_text("Catatan penting milik Budi.", encoding="utf-8")

p = Path("arsip/catatan.txt")

print("exists() :", p.exists())
print("is_file() :", p.is_file())
print("is_dir()  :", p.is_dir())
print("read_text():", p.read_text(encoding="utf-8"))

Output yang Dihasilkan:

text
exists() : True
is_file() : True
is_dir()  : False
read_text(): Catatan penting milik Budi.

Tiga method pemeriksaan menjawab tiga pertanyaan berbeda: exists() untuk “apakah ada di disk”, is_file() untuk “apakah berkas biasa”, dan is_dir() untuk “apakah direktori” (folder — dibahas tuntas pada Chapter Mengelola Direktori). Pasangan write_text()/read_text() membuka, menulis/membaca, lalu menutup berkas dalam satu panggilan — cukup untuk berkas kecil; untuk berkas besar tetap gunakan open() beserta iterasinya.

name, stem, suffix, dan parent #

Mengurai bagian-bagian path adalah pekerjaan yang rawan salah bila dikerjakan dengan method string. Path menyediakannya sebagai attribute:

python
from pathlib import Path

p = Path("arsip/laporan/penjualan-februari.txt")

print("name   :", p.name)
print("stem   :", p.stem)
print("suffix :", p.suffix)
print("parent :", p.parent)
print("parent dari parent:", p.parent.parent)

Output yang Dihasilkan:

text
name   : penjualan-februari.txt
stem   : penjualan-februari
suffix : .txt
parent : arsip/laporan
parent dari parent: arsip

Perhatikan urutan tampilan di atas: name adalah nama berkas lengkap dengan ekstensi, stem nama tanpa ekstensi, suffix ekstensi beserta titiknya, dan parent berupa Path baru berisi lokasi induk — yang tentu saja punya parent lagi. Mengganti ekstensi pun ringkas: p.with_suffix(".csv") menghasilkan Path baru tanpa mengubah berkas lama.

pathlib vs os.path #

Module os.path adalah cara klasik yang masih banyak kita temui di kode lama. Tabel ini memetakan padanannya:

Tugasos.path (klasik)pathlib (modern)
Menggabungkan pathos.path.join("data", "a.txt")Path("data") / "a.txt"
Cek keberadaanos.path.exists("a.txt")Path("a.txt").exists()
Nama berkasos.path.basename(p)p.name
Direktori indukos.path.dirname(p)p.parent
Ekstensios.path.splitext(p)p.suffix

Semua fungsi open(), csv, dan json menerima object Path langsung — open(berkas) dengan berkas berupa Path bekerja sama seperti dengan string. Untuk kode baru, pathlib adalah pilihan default; os.path cukup kita pahami agar bisa membaca program lama.

Mencari Berkas dengan glob() #

Method glob() mencari berkas yang cocok dengan pola tertentu dan mengembalikan iterator Path:

python
from pathlib import Path

folder = Path("catatan-glob")
folder.mkdir(exist_ok=True)
(folder / "harian.txt").write_text("harian", encoding="utf-8")
(folder / "mingguan.txt").write_text("mingguan", encoding="utf-8")
(folder / "backup.json").write_text("{}", encoding="utf-8")

for berkas in sorted(folder.glob("*.txt")):
    print(berkas)

Output yang Dihasilkan:

text
catatan-glob/harian.txt
catatan-glob/mingguan.txt

Pola "*.txt" mencocokkan semua nama berakhiran .txt di dalam folder, dan sorted() menjadikan urutan hasil pasti. Pola lain yang sering dipakai: "data/*.csv" untuk satu subfolder, "???.txt" untuk nama tiga karakter, dan "**/*.py" lewat rglob() untuk pencarian rekursif ke seluruh subfolder. Hasil glob() juga bisa dirantai — setiap elemennya sudah berupa Path yang siap diperiksa, dibaca, atau diolah lebih lanjut.