Belajar dengan membaca secara berurutan

os dan pathlib — Path File dan Operasi Direktori

Pelajari modul os.path dan pathlib Python dari dasar. Bangun path yang bekerja di OS apa pun, list dan telusuri direktori secara rekursif, dan pecah path menjadi bagian-bagian dengan objek Path — semuanya praktik langsung.

Dua modul menangani path file dan direktori — os.path yang lebih lama dan pathlib yang lebih baru dan mudah dibaca. Artikel ini menelusuri konstruksi path yang independen dari OS, listing direktori dan traversal rekursif, dan memecah path menjadi bagian-bagian dengan objek Path, dalam urutan itu.

os.path — Bangun Path yang Independen dari OS

Pemisah path berbeda menurut OS. Windows memakai \ (backslash), sedangkan Linux dan macOS memakai /. Hard-coding `"data/sales/2024.csv"` langsung di kodemu jalan di Linux dan Mac, tapi Windows bisa salah membaca path saat runtime.

Jika kamu memecah bagian-bagian dan melewatkan ke os.path.join("data", "sales", "2024.csv"), Python memilih separator yang benar saat itu juga berdasarkan OS tempat ia berjalan.

os.path.join Mengganti Separator per OS
os.path.join( 'data', 'sales', '2024.csv')Linux / Macdata/sales/2024.csvWindowsdata\sales\2024.csv
Kode Python yang sama dieksp ke / di Linux / Mac dan \ di Windows. Jangan menanam karakter separator manual — itu trik untuk tetap portabel.
FungsiArtiContoh
os.path.join(*parts)Gabungkan path dengan separator OSjoin('data', 'sales') → 'data/sales'
os.path.exists(p)Apakah path adaTrue / False
os.path.isfile(p)Apakah file (bukan direktori)True / False
os.path.isdir(p)Apakah direktoriTrue / False
os.path.basename(p)Nama file atau folder paling akhirbasename('data/x.csv') → 'x.csv'
os.path.dirname(p)Path induk dengan ekor dilepasdirname('data/x.csv') → 'data'
os.path.splitext(p)Pisah ekstensisplitext('x.csv') → ('x', '.csv')

Bangun path ke file CSV penjualan dengan os.path dan baca isinya (kamu bisa melihat data/sales/2024_q1.csv dan lainnya di bawah panel 📂 Files di kiri).

① Impor os dan gabungkan tiga bagian path data / sales / 2024_q1.csv menjadi satu string dengan separator OS.

② Cetak path lengkap apa adanya.

③ Buka file data/sales/2024_q1.csv yang sudah dimuat dengan open(path, "r") dan cetak tiga baris pertama.

(Jika kamu menjalankannya dengan benar, penjelasan muncul di bawah.)

Python Editor

Jalankan kode untuk melihat output

Latihan 2 — Pisahkan Nama dan Ekstensi dengan basename dan splitext

Jangan jejalkan semuanya di satu baris — assign langkah demi langkah ke variabel perantara dan pisahkan nama file dari ekstensinya. basename menarik nama file paling akhir dari path lengkap, dan splitext memecah nama itu menjadi tuple (nama, ekstensi).

Jangan tulis di satu baris — lewat variabel perantara untuk mengekstrak nama file dan ekstensi.

① Impor os dan set path = "data/sales/2024_q1.csv".

② Tarik nama file paling akhir dengan os.path.basename(path), simpan di filename, dan cetak.

③ Pakai os.path.splitext(filename) untuk mendapat tuple (nama, ekstensi), simpan di parts, dan cetak.

Unpack tuple itu ke stem dan suffix, dan cetak sebagai stem suffix dipisahkan spasi.

Python Editor

Jalankan kode untuk melihat output

os.listdir dan os.walk — Listing Direktori dan Traversal Rekursif

Saat kamu ingin menarik isi folder ke Python, pakai os.listdir untuk hanya satu level dan os.walk untuk turun rekursif ke subfolder. os.listdir mengembalikan list nama (baik file maupun subfolder) langsung di dalam folder yang kamu spesifikasikan, sedangkan os.walk menelusuri seluruh subtree secara rekursif dan menghasilkan tuple (path saat ini, list nama subfolder, list nama file) satu level pada satu waktu.

Perbedaan os.listdir dan os.walk
os.listdirList namadi folder langsungos.walkTelusuri rekursifsetiap level
os.listdir memberimu hanya nama langsung; os.walk turun rekursif melalui setiap level. Pilih berdasarkan seberapa dalam kamu perlu pergi.
import os

# Satu level: nama langsung di bawah 'data'
print(os.listdir("data"))
# → ['sales', 'inventory']

# Rekursif: telusuri semua di bawah 'data'
for dirpath, dirnames, filenames in os.walk("data"):
    print(dirpath, filenames)
# → data ['sales', 'inventory'] []
#    data/sales [] ['2024_q1.csv', '2024_q2.csv']
#    data/inventory [] ['items.json']

Tampilkan apa yang ada di dalam direktori `data/` dengan dua cara — pertama level langsung, lalu rekursif.

① Impor os.

② Pakai os.listdir("data") untuk list nama langsung di bawah `data/` dalam urutan tersortir (bungkus dengan sorted untuk menjaga urutan stabil).

③ Pakai os.walk("data") untuk menelusuri data/ secara rekursif dan cetak satu baris per level menampilkan (path saat ini, list nama file) (bungkus list nama file dengan sorted juga).

Python Editor

Jalankan kode untuk melihat output

glob — Pencocokan Pola untuk Mengumpulkan File

Saat kamu ingin mengambil hanya file yang cocok dengan kondisi — seperti hanya file dengan ekstensi `.csv` — modul glob adalah jalur terpendek. Tulis target sebagai pola memakai wildcard seperti * (string apa pun) atau ** (kedalaman apa pun) dan kamu mendapat list path yang cocok.

Wildcard glob
*String apa pun dilevel yang sama**Melintasi kedalaman apa pun(recursive=True)
* cocok dengan string apa pun di level yang sama, ** melintasi sejumlah level apa pun (membutuhkan recursive=True).
import glob

# File CSV langsung di bawah data/sales
print(glob.glob("data/sales/*.csv"))
# → ['data/sales/2024_q1.csv', 'data/sales/2024_q2.csv']

# Pencarian rekursif di bawah data (** + recursive=True)
print(glob.glob("data/**/*.csv", recursive=True))
# → ['data/sales/2024_q1.csv', 'data/sales/2024_q2.csv']

Wildcard ** glob Berpasangan dengan recursive=True

Tanda asterisk ganda di glob.glob("data/**/*.csv") adalah wildcard yang melintasi sejumlah level apa pun. Tapi tanpa recursive=True, ia berperilaku seperti * biasa dan tidak akan menemukan apa pun di folder yang lebih dalam. Selalu lewatkan argumen itu saat kamu ingin pencarian rekursif.

Tarik file CSV di `data/sales/` dalam sekali pukul dengan glob.

① Impor glob.

② Pakai glob.glob("data/sales/*.csv") untuk meraih CSV di bawah sales, sortir dengan sorted, dan simpan hasil di csv_files.

③ Cetak tiap path satu per satu.

④ Cetak jumlahnya dalam bentuk Found files: ◯.

Python Editor

Jalankan kode untuk melihat output

pathlib.Path — Operasi Path Berbasis Objek

Sementara os.path adalah library yang menangani path sebagai string, sejak Python 3.4 pendekatan yang direkomendasikan adalah pathlib.Path, yang memperlakukan path itu sendiri sebagai objek. Bangun dengan Path("data/sales/2024_q1.csv") dan kamu bisa mengakses tiap bagian lewat atribut seperti .parent untuk folder induk, .name untuk bagian paling akhir, .stem untuk nama tanpa ekstensi, dan .suffix untuk ekstensi.

Atribut Objek Path
Path('data/sales/2024_q1.csv').parentPath('data/sales').name'2024_q1.csv'.stem'2024_q1'.suffix'.csv'
Dari satu Path kamu bisa menarik tiap bagian dengan .parent / .name / .stem / .suffix. Lebih mudah dibaca daripada memanggil os.path.dirname / basename / splitext terpisah.
from pathlib import Path

p = Path("data") / "sales" / "2024_q1.csv"   # Gabung dengan operator /
print(p)               # data/sales/2024_q1.csv
print(p.parent)        # data/sales
print(p.name)          # 2024_q1.csv
print(p.stem)          # 2024_q1
print(p.suffix)        # .csv
print(p.exists())      # True

# Baca isi (wrapper di sekitar with open)
print(p.read_text())   # Isi CSV

# List subfolder (setara dengan os.walk)
for sub in Path("data").rglob("*.csv"):
    print(sub)

`os.path` berbasis string, `pathlib.Path` berbasis objek — keduanya menawarkan operasi yang sama. Tabel di bawah memetakan tiap tugas di antara mereka.

Yang ingin kamu lakukanGaya os.pathGaya pathlib
Gabungos.path.join('data', 'x.csv')Path('data') / 'x.csv'
Folder indukos.path.dirname(p)p.parent
Nama fileos.path.basename(p)p.name
Nama tanpa ekstensiPakai os.path.splitext(p)[0]p.stem
Ekstensios.path.splitext(p)[1]p.suffix
Cek keberadaanos.path.exists(p)p.exists()
Pencarian rekursifglob.glob('**/*.csv', recursive=True)Path('.').rglob('*.csv')
Bacawith open(p) as f: f.read()p.read_text()

Pilih pathlib untuk Kode Baru

Pathlib direkomendasikan untuk kode baru. Saat API library lama membutuhkan path string (driver DB tertentu, misalnya), konversi dengan str(p). os.path tidak akan ke mana-mana, jadi mengetahui kedua pemetaan menjaga kamu nyaman membaca kode legacy juga.

Pakai pathlib.Path untuk menangani CSV penjualan. Alih-alih menggabungkan string langsung, dapatkan hasil yang sama lewat operator dan atribut objek Path.

① Impor class Path dari pathlib.

② Bangun satu objek Path dari tiga bagian data / sales / 2024_q1.csv memakai operator gabung Path (pengganti os.path.join).

③ Tarik nama tanpa ekstensi dan ekstensi dari Path lewat akses atribut, dan cetak dipisahkan spasi.

④ Pakai metode Path untuk membaca isi file sebagai satu string dan cetak (cara yang tidak butuh with open(...)).

Python Editor

Jalankan kode untuk melihat output
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Mana cara yang direkomendasikan untuk membangun path yang tidak rusak baik di Windows maupun Linux?

Soal 2Mana yang paling cocok untuk menelusuri setiap level folder secara rekursif?

Soal 3Diberikan p = Path("data/sales/2024_q1.csv"), apa nilai dari p.stem?