Tiga modul pustaka standar melingkupi hubungan program dengan sistem berkas dan lingkungannya. Modul pathlib menyusun dan menelusuri jalur berkas sebagai objek, modul os menyediakan akses ke variabel lingkungan dan operasi tingkat sistem, sedangkan modul sys membuka akses ke interpreter, termasuk argumen baris perintah melalui sys.argv. Topik ini membahas ketiganya dengan contoh yang dapat direproduksi penuh di terminal.
Menyusun dan membedah jalur dengan pathlib#
Kelas Path memandang jalur berkas sebagai objek yang memiliki komponen, bukan sekadar string. Operator / menyambung komponen jalur dengan pemisah yang tepat untuk sistem operasi tempat program berjalan, sedangkan atribut name, stem, suffix, parent, dan parts membedah jalur menjadi bagian-bagiannya. Pendekatan ini menghilangkan penggabungan string manual yang rawan keliru.
from pathlib import Path
jalur = Path("arsip/cadangan/keuangan-2026.xlsx")
print(jalur.parts)
print(jalur.name, jalur.stem, jalur.suffix)
print(jalur.parent)
gabungan = Path("arsip") / "cadangan" / "data.csv"
print(gabungan)('arsip', 'cadangan', 'keuangan-2026.xlsx')
keuangan-2026.xlsx keuangan-2026 .xlsx
arsip/cadangan
arsip/cadangan/data.csvAtribut parts mengembalikan tuple komponen, name menyimpan nama berkas lengkap dengan ekstensi, stem menyimpan nama tanpa ekstensi, dan suffix menyimpan ekstensi beserta titik di depannya. Operator / bekerja pada Path maupun antara Path dengan string, dan hasilnya selalu memakai pemisah yang benar. Metode keberadaan seperti exists(), is_file(), dan is_dir() melengkapi kelas ini untuk pemeriksaan sebelum berkas diproses.
Menelusuri direktori#
Penelusuran isi direktori dilakukan dengan metode iterdir() untuk satu tingkat, serta glob() dan rglob() untuk pencarian pola. Metode rglob() menelusuri subdirektori secara rekursif. Hasil penelusuran berupa objek Path yang urutannya tidak dijamin, sehingga sorted() digunakan sebelum hasilnya dilaporkan. Contoh berikut membangun struktur direktori sementara, menelusurinya, lalu membersihkannya secara otomatis ketika blok with selesai.
import tempfile
from pathlib import Path
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
(root / "laporan").mkdir()
(root / "laporan" / "januari.txt").write_text("isi laporan")
(root / "data.csv").write_text("a,b")
for p in sorted(root.rglob("*")):
jenis = "berkas" if p.is_file() else "direktori"
print(p.relative_to(root), jenis)
txt = sorted(root.rglob("*.txt"))
print("berkas txt:", [t.name for t in txt])data.csv berkas
laporan direktori
laporan/januari.txt berkas
berkas txt: ['januari.txt']Pola rglob("*") menemukan seluruh entri di semua tingkat, sedangkan rglob("*.txt") hanya menemukan berkas dengan ekstensi txt. Metode relative_to() memotong bagian awal jalur sehingga cetakan tetap ringkas tanpa menampilkan lokasi sementara yang panjang. Pada pekerjaan nyata, pola yang sama dipakai untuk mengumpulkan seluruh berkas laporan dalam sebuah pohon proyek.
Modul os untuk lingkungan dan operasi berkas#
Modul os menyediakan akses ke layanan sistem operasi, dan bagian yang paling sering digunakan adalah os.environ, yaitu kamus variabel lingkungan (environment) yang diwarisi proses. Pembacaan dilakukan dengan kunci spesifik melalui operator in atau metode get() yang menyediakan nilai cadangan, sehingga program tetap berjalan bila kunci tidak ada. Contoh berikut hanya membaca kunci tertentu dan tidak mencetak isi lingkungan secara utuh.
import os
print("HOME" in os.environ)
print("PATH" in os.environ)
print(os.environ.get("CONTOH_KUNCI", "tidak disetel"))True
True
tidak disetelKunci HOME dan PATH tersedia pada lingkungan Linux, sedangkan CONTOH_KUNCI sengaja dipilih karena tidak disetel, sehingga metode get() mengembalikan nilai cadangannya. Pada sisi operasi berkas, fungsi os.replace() mengganti nama berkas dan menimpa tujuan secara atomik apabila tujuan sudah ada, sedangkan os.listdir() membaca isi satu direktori.
import os
import tempfile
with tempfile.TemporaryDirectory() as tmp:
lama = os.path.join(tmp, "draf.txt")
baru = os.path.join(tmp, "final.txt")
with open(lama, "w", encoding="utf-8") as f:
f.write("isi")
os.replace(lama, baru)
print(sorted(os.listdir(tmp)))['final.txt']Fungsi os.path.join() menyambung komponen jalur dalam bentuk string dan merupakan padanan lama dari operator / milik pathlib. Setelah os.replace() dijalankan, isi direktori hanya memuat final.txt, yang menunjukkan nama lamanya sudah tidak ada. Untuk kode baru, pathlib menjadi pilihan utama, sedangkan os tetap diperlukan untuk variabel lingkungan dan fungsi sistem yang tidak disediakan pathlib.
Modul sys dan argumen baris perintah#
Modul sys berisi objek yang terikat pada interpreter yang sedang berjalan. Daftar sys.argv menyimpan kata-kata yang diketik pada baris perintah, dengan sys.argv[0] berisi nama berkas skrip dan elemen berikutnya berisi argumennya. Berkas berikut menghitung argumen yang diterima lalu menyapanya satu per satu.
import sys
jumlah = len(sys.argv) - 1
print(f"Argumen diterima: {jumlah}")
for arg in sys.argv[1:]:
print("sapaan untuk", arg)Argumen diterima: 0Ketika dijalankan tanpa argumen, daftar sys.argv hanya memuat nama skripnya, sehingga pengurangan satu menghasilkan nol. Pola ini menjaga program tetap aman ketika dijalankan tanpa argumen, sebab pengaksesan langsung sys.argv[1] tanpa pemeriksaan akan menimbulkan IndexError. Berikut adalah hasilnya bila dua argumen dikirim dari terminal.
# menjalankan salam.py dengan dua argumen posisi
python3 salam.py Ali BudiArgumen diterima: 2
sapaan untuk Ali
sapaan untuk BudiSelain sys.argv, modul ini menyediakan sys.platform yang berisi nama sistem operasi seperti linux, dan sys.version_info yang menyimpan versi interpreter sebagai tuple. Keduanya berguna untuk percabangan yang menyesuaikan perilaku program dengan lingkungannya.
import sys
print(sys.platform)
print(sys.version_info.major, sys.version_info.minor)
print(sys.maxsize > 2**32)linux
3 12
TrueNilai sys.platform berbeda antar sistem operasi, sehingga keluaran di atas berlaku untuk lingkungan Linux tempat contoh ini dijalankan. Atribut version_info dipecah menjadi komponen mayor dan minor, sedangkan sys.maxsize yang lebih besar dari 2^32 menandakan interpreter berukuran 64 bit. Daftar sys.path yang memuat lokasi pencarian modul juga tersedia di modul ini, tetapi isinya bergantung pada instalasi sehingga tidak dicetak utuh di sini.
Kesalahan umum#
Kesalahan pertama adalah mengakses argumen tanpa memeriksa jumlahnya. Pengaksesan sys.argv[1] pada pemanggilan tanpa argumen menimbulkan error berikut.
import sys
try:
sys.argv[1]
except IndexError as e:
print("IndexError:", e)IndexError: list index out of rangePerbaikannya adalah menguji len(sys.argv) terlebih dahulu, atau memanfaatkan modul argparse yang menangani validasi argumen secara menyeluruh. Kesalahan kedua adalah menyambung jalur berkas dengan penjumlahan string seperti "arsip" + "/" + nama. Bentuk ini hanya benar pada sistem operasi yang pemisahnya garis miring, sedangkan operator / milik pathlib memilih pemisah yang tepat secara otomatis.
Kesalahan ketiga adalah mencetak sys.path atau os.environ secara utuh untuk debugging. Keluarannya panjang, bergantung mesin, dan dapat membocorkan nilai sensitif, sehingga inspeksi dilakukan dengan kunci atau indeks tertentu saja. Apabila lokasi pencarian modul perlu diperiksa, cetak satu elemen tertentu atau uji keanggotaan satu jalur dengan operator in.
Ringkasan#
pathlib.Pathmembedah jalur melaluiparts,name,stem,suffix, danparent, serta menyambung komponen dengan operator/.- Penelusuran direktori menggunakan
iterdir(),glob(), danrglob(), dengan hasil berupa objekPathyang urutannya perlu disortir sebelum dilaporkan. os.environdibaca per kunci melalui operatorinatauget()dengan nilai cadangan, danos.replace()mengganti nama berkas dengan menimpa tujuan.sys.argvmenyimpan argumen baris perintah dengan nama skrip pada indeks nol, sedangkansys.platformdansys.version_infomenggambarkan lingkungan interpreter.
Referensi#
- pathlib — Python Software Foundation — Dokumentasi kelas Path beserta metode penelusuran dan pemeriksaan jalurnya.
- os — Python Software Foundation — Dokumentasi modul os untuk variabel lingkungan dan operasi berkas tingkat sistem.
- sys — Python Software Foundation — Dokumentasi modul sys untuk argv, platform, dan path pencarian modul.