BAB 8: Gudang Perkakas: Modul, Import, dan Jalur Berkas
Studi kasus: "Skrip jalan di komputer saya, tapi tidak di komputer kantor" #
Analis Muda mengirim skrip ke rekan di kantor cabang. Balasannya singkat: "Galat. Berkas tidak ditemukan." Ternyata skrip itu menyebut folder C:/Data/..., dan folder itu hanya ada di komputer Anda. Pelajaran hari ini: cara memanggil perkakas siap pakai, dan cara menulis alamat berkas supaya skrip bisa berpindah komputer.
Konsep: modul dan jalur dalam tiga kalimat #
Sebuah modul adalah laci perkakas yang sudah disiapkan orang lain, dan import adalah perintah untuk membuka laci itu. Jalur adalah alamat lengkap sebuah berkas, seperti alamat rumah yang ditulis dari kota sampai nomor rumah. Skrip yang baik tidak menulis alamat mati di tengah kode, melainkan menaruhnya di satu tempat di bagian atas supaya mudah diganti.

Istilah baru di bagian ini:
- Modul: berkas Python berisi perkakas siap pakai. Contoh:
os,shutil,csv. import: perintah memanggil sebuah modul.- Jalur (path): alamat lengkap berkas atau folder.
- Variabel lingkungan: pengaturan bernama yang disimpan oleh sistem operasi, dan bisa dibaca skrip.
Import: membuka laci perkakas #
import os
print(os.name)
print(os.path.join("data", "paket-b2", "Petak_KPH.gpkg"))Penjelasannya:
import osmembuka modulos, perkakas untuk urusan sistem operasi: folder, berkas, dan pengaturan.os.namememberi nama jenis sistem operasi. Di Windows jawabannyant, di macOS dan Ubuntuposix. [CEK untuk macOS dan Ubuntu]os.path.joinmerangkai potongan alamat dengan pemisah yang sesuai sistem operasi. Anda tidak perlu mengingat apakah harus\atau/.
nt
data\paket-b2\Petak_KPH.gpkgDi macOS dan Ubuntu, baris kedua tertulis dengan garis miring biasa: data/paket-b2/Petak_KPH.gpkg.
Ada tiga cara membuka modul:
import os, lalu pakaios.makedirs(...). Awalanos.menunjukkan asal perkakas.from os import makedirs, lalu pakaimakedirs(...)langsung.from qgis.core import QgsVectorLayer: bentuk kedua yang paling sering Anda temui di skrip GIS.
Perkakas berkas: os dan shutil #
import os
import shutil
os.makedirs("keluaran", exist_ok=True)
with open("asli.txt", "w") as f:
f.write("Petak P-01")
shutil.copy("asli.txt", os.path.join("keluaran", "salinan.txt"))
print(os.listdir("keluaran"))
print(os.path.exists(os.path.join("keluaran", "salinan.txt")))
print(os.path.basename("data/paket-b2/Petak_KPH.gpkg"))Penjelasannya:
os.makedirs("keluaran", exist_ok=True)membuat folder.exist_ok=Trueberarti "jangan galat bila folder sudah ada".- Baris
with open(...)menulis berkas kecil. Cara kerjanya dibahas di Bab 9. shutil.copy(asal, tujuan)menyalin berkas.os.listdirmendaftar isi folder, danos.path.existsbertanya apakah sebuah berkas ada.os.path.basenamemengambil nama berkas dari jalur lengkap.
['salinan.txt']
True
Petak_KPH.gpkgMenaruh alamat di satu tempat #
Perhatikan cara skrip GIS menyimpan alamat. Alamat mati tidak diselipkan di tengah kode. Ia ditaruh di baris atas, sebagai kotak bernama berhuruf besar. Cara yang lebih baik lagi: alamat boleh diganti dari luar lewat variabel lingkungan.
import os
DATA = os.environ.get("B2_DATA", r"C:/KPH_Contoh/paket-b2")
print(DATA)os.environ.get("B2_DATA", ...) bertanya kepada sistem: "Adakah pengaturan bernama B2_DATA?" Bila ada, nilainya dipakai. Bila tidak, dipakai alamat cadangan di ujung.
C:/KPH_Contoh/paket-b2Dua hal penting tentang penulisan alamat:
- Huruf
rdi depan kutip (r"C:\Data") membuat garis miring terbalik dibaca apa adanya. Tanpa hurufr, garis miring terbalik dipakai Python untuk tanda khusus, misalnya\nberarti baris baru, dan alamat jadi salah. - Garis miring biasa
/aman dipakai di Windows, macOS, dan Ubuntu. Karena itu banyak skrip GIS menulis"C:/KPH_Contoh/paket-b2"dengan garis miring biasa.
Tempat Python mencari modul: sys.path #
Saat Anda menulis import namamodul, Python mencari modul itu di sejumlah folder. Daftar folder itu tersimpan di sys.path. Pada Bab 3 Anda sudah melihat baris sys.path.append(...): baris itu menambah satu folder ke daftar.
import sys
print(type(sys.path).__name__)
sys.path.append("modul-saya")
print(sys.path[-1])list
modul-sayaJadi sys.path adalah daftar biasa, dan append menambah satu folder di ujung.
Skrip yang dibedah: pembuka b2_03_digitasi.py #
Tujuan. Menyiapkan folder hasil dan menyalin tiga berkas data agar berkas asli tidak berubah saat Anda menggambar.
Bahan. Paket data paket-b2. Variabel lingkungan B2_DATA dan B2_KELUAR boleh diisi, atau ganti alamat cadangannya.
Skrip (bagian pembuka):
import os
import shutil
from qgis.core import (QgsVectorLayer, QgsRasterLayer, QgsFeature, QgsGeometry, QgsPointXY, QgsPoint, QgsLineString)
DATA = os.environ.get("B2_DATA", r"C:/KPH_Contoh/paket-b2")
KELUAR = os.environ.get("B2_KELUAR", r"C:/KPH_Contoh/keluaran")
os.makedirs(KELUAR, exist_ok=True)
X0, Y0 = 312000.0, 9996000.0 # sudut barat-daya area contoh
# Salin lapisan kosong agar berkas asli di paket data tidak berubah
for nama in ("Jalan_Baru.gpkg", "Persemaian_Baru.gpkg", "Petak_KPH.gpkg"):
shutil.copy(os.path.join(DATA, nama), os.path.join(KELUAR, nama))Penjelasan baris demi baris. Nomor baris dihitung dari potongan di atas.
| Baris | Tulisan | Artinya |
|---|---|---|
| 1-2 | import os, import shutil | Buka dua laci perkakas: urusan sistem dan penyalinan berkas. |
| 3 | from qgis.core import (...) | Ambil delapan perkakas khusus dari QGIS. Kurung panjang boleh dipecah ke beberapa baris. |
| 5 | DATA = os.environ.get(...) | Isi kotak DATA dengan lokasi folder data. Bila pengaturan B2_DATA ada, nilainya dipakai. |
| 6 | KELUAR = os.environ.get(...) | Sama, untuk folder hasil. |
| 7 | os.makedirs(KELUAR, exist_ok=True) | Buat folder hasil bila belum ada. |
| 8 | X0, Y0 = 312000.0, 9996000.0 | Isi dua kotak sekaligus dengan sepasang angka. Itu koordinat sudut barat-daya area contoh. |
| 10 | # Salin lapisan kosong ... | Komentar yang menjelaskan alasan penyalinan. |
| 11 | for nama in (...): | Ulangi untuk tiga nama berkas. Tanda kurung biasa menandakan tuple (Bab 5). |
| 12 | shutil.copy(os.path.join(DATA, nama), os.path.join(KELUAR, nama)) | Rangkai alamat asal dan tujuan dengan os.path.join, lalu salin berkas. |
Hasil. Skrip bagian ini tidak mencetak apa-apa. Untuk membuktikan salinannya, tambahkan satu baris di ujung:
import os
import shutil
DATA = os.environ.get("B2_DATA", r"C:/KPH_Contoh/paket-b2")
KELUAR = os.environ.get("B2_KELUAR", r"C:/KPH_Contoh/keluaran")
os.makedirs(KELUAR, exist_ok=True)
for nama in ("Jalan_Baru.gpkg", "Persemaian_Baru.gpkg", "Petak_KPH.gpkg"):
shutil.copy(os.path.join(DATA, nama), os.path.join(KELUAR, nama))
print(sorted(os.listdir(KELUAR)))Dengan B2_DATA menunjuk folder paket-b2 dan B2_KELUAR menunjuk folder hasil yang kosong, layar menampilkan:
['Jalan_Baru.gpkg', 'Persemaian_Baru.gpkg', 'Petak_KPH.gpkg']Bagian yang boleh diubah.
- Baris 5, lokasi data. Ganti alamat cadangan dengan lokasi
paket-b2di komputer Anda. Atau isi variabel lingkunganB2_DATA. - Baris 6, lokasi hasil. Pilih folder hasil di tempat yang Anda kuasai, misalnya
Dokumen/keluaran. - Baris 11, daftar berkas. Tambah atau kurangi nama berkas yang disalin.
Jebakan.
- Alamat contoh tidak ada di komputer Anda. Bila
B2_DATAtidak diisi dan folderC:/KPH_Contoh/paket-b2tidak ada,shutil.copyberhenti denganFileNotFoundError. Ganti baris 5. - Huruf
rhilang pada alamat Windows. Menulis"C:\data\nilai"tanpa hurufrmembuat\ndibaca sebagai baris baru. Alamatnya rusak tanpa pesan yang jelas. - Mengubah berkas asli. Skrip ini sengaja bekerja pada salinan. Bila Anda menggambar langsung di berkas asli, data contoh ikut berubah.
- Sistem operasi berbeda. Alamat dengan huruf drive (
C:/) hanya ada di Windows. Di macOS dan Ubuntu, pakai alamat seperti/home/anda/.... [CEK]
Latihan variasi. Ubah skrip supaya menyalin hanya Petak_KPH.gpkg, dan mencetak jalur lengkap salinannya.
Contoh jawaban, hanya bagian yang berubah:
import os
import shutil
DATA = os.environ.get("B2_DATA", r"C:/KPH_Contoh/paket-b2")
KELUAR = os.environ.get("B2_KELUAR", r"C:/KPH_Contoh/keluaran")
os.makedirs(KELUAR, exist_ok=True)
tujuan = os.path.join(KELUAR, "Petak_KPH.gpkg")
shutil.copy(os.path.join(DATA, "Petak_KPH.gpkg"), tujuan)
print("Tersalin ke:", tujuan)Cek paham #
- Apa fungsi
os.path.join? - Mengapa alamat Windows sering diawali huruf
r? - Apa yang terjadi bila variabel lingkungan
B2_DATAtidak ada?
Jawaban.
- Merangkai potongan alamat dengan pemisah yang sesuai sistem operasi.
- Agar garis miring terbalik dibaca apa adanya, bukan sebagai tanda khusus.
- Skrip memakai alamat cadangan yang tertulis di ujung baris
os.environ.get(...).
Kesalahan umum #
- Menyelipkan alamat mati di banyak tempat. Perbaikan: taruh satu kali di bagian atas.
- Memakai satu garis miring terbalik dalam teks biasa. Perbaikan: tambah huruf
rdi depan kutip, atau pakai garis miring biasa. - Lupa membuat folder hasil. Perbaikan: panggil
os.makedirs(..., exist_ok=True)sebelum menulis ke folder itu.
Ringkasan dan latihan #
importmembuka laci perkakas.osmengurus folder dan berkas,shutilmenyalin.os.path.joinmerangkai alamat sesuai sistem operasi. Garis miring biasa aman di tiga sistem.- Taruh alamat di satu tempat, dan bila perlu bisa diganti lewat variabel lingkungan.
Latihan. Tulis skrip yang membuat folder hasil_latihan, membuat berkas catatan.txt di dalamnya, lalu mencetak daftar isi folder itu.
Tabel perbandingan: alamat di tiga sistem operasi #
| Hal | Windows | macOS | Ubuntu |
|---|---|---|---|
| Contoh alamat | C:/Data/paket-b2 | /Users/anda/data/paket-b2 | /home/anda/data/paket-b2 |
| Pemisah folder biasa | \ | / | / |
os.name | nt | posix | posix |