File Paths
Konsep File Path di Python
Saat membaca atau menulis berkas, Python akan mencari berkas tersebut berdasarkan jalur direktori atau file path yang diberikan.
Jika berkas berada di folder yang sama dengan skrip Python, kita cukup menyebutkan nama berkasnya.
Contoh:
with open("sad.txt", mode="r") as my_file:
print(my_file.read())
Namun, jika berkas berada di folder yang berbeda, kita perlu menentukan lokasi berkas tersebut menggunakan file path.
Secara umum, file path dapat dibagi menjadi:
- Relative Path
- Absolute Path
Relative Path
Relative path adalah jalur file yang ditentukan berdasarkan lokasi direktori tempat program Python sedang dijalankan atau present working directory.
Relative path tidak dimulai dari root sistem operasi, melainkan dari lokasi saat ini.
Struktur direktori sebagai contoh:
project/
├── main.py
├── sad.txt
└── app/
└── happy.txt
Jika main.py dijalankan dari direktori project, maka file sad.txt dapat diakses secara langsung:
with open("sad.txt", mode="r") as my_file:
print(my_file.read())
Sedangkan file yang berada di dalam folder app dapat diakses menggunakan:
with open("app/happy.txt", mode="r") as my_file:
print(my_file.read())
Mengakses Folder di Dalam Direktori Saat Ini
Untuk mengakses file yang berada di dalam folder lain, tuliskan nama folder kemudian nama file.
Contoh:
with open("app/sad.txt", mode="r") as my_file:
print(my_file.read())
Struktur direktori:
project/
├── main.py
└── app/
└── sad.txt
Karena folder app berada di dalam direktori saat ini, kita dapat menggunakan:
app/sad.txt
Menggunakan ./
Notasi ./ digunakan untuk menunjukkan direktori saat ini.
Contoh:
with open("./app/sad.txt", mode="r") as my_file:
print(my_file.read())
Pada contoh tersebut:
./
menunjukkan direktori tempat program sedang berjalan.
Kemudian:
app/sad.txt
menunjukkan folder dan file yang ingin diakses.
Dengan demikian:
./app/sad.txt
dan:
app/sad.txt
dapat merujuk ke lokasi yang sama ketika digunakan dari direktori saat ini.
Menggunakan ../
Notasi ../ digunakan untuk berpindah satu tingkat ke direktori di atas direktori saat ini.
Misalnya struktur direktori:
project/
├── sad.txt
└── app/
└── main.py
Jika main.py berada di dalam folder app, sedangkan sad.txt berada satu tingkat di atasnya, kita dapat menggunakan:
with open("../sad.txt", mode="r") as my_file:
print(my_file.read())
Pergerakannya dapat digambarkan sebagai:
app/
└── main.py
│
└── ../
↓
project/
└── sad.txt
Dengan demikian, ../ digunakan untuk keluar dari direktori saat ini menuju direktori satu tingkat di atasnya.
Beberapa Tingkat Direktori dengan ../
Notasi ../ juga dapat digunakan beberapa kali jika perlu berpindah lebih dari satu tingkat.
Contoh:
project/
├── data/
│ └── file.txt
└── src/
└── app/
└── main.py
Dari main.py, untuk menuju data/file.txt, kita dapat menggunakan:
with open("../../data/file.txt", mode="r") as my_file:
print(my_file.read())
Setiap ../ berarti berpindah satu tingkat ke atas.
Absolute Path
Absolute path adalah jalur file yang dimulai dari lokasi paling dasar atau root sistem operasi sampai menuju lokasi file yang ingin diakses.
Berbeda dengan relative path, absolute path tidak bergantung pada direktori saat ini.
Contoh pada Unix, Mac, atau Linux:
with open("/Users/username/Desktop/app/sad.txt", mode="r") as my_file:
print(my_file.read())
Path tersebut menunjukkan lokasi file secara lengkap mulai dari root:
/
└── Users/
└── username/
└── Desktop/
└── app/
└── sad.txt
Relative Path vs Absolute Path
Perbedaan keduanya dapat dilihat dari titik awal path.
Relative Path
Relative path dimulai dari direktori saat ini.
Contoh:
app/sad.txt
atau:
./app/sad.txt
Relative path dapat berubah maknanya jika program dijalankan dari direktori yang berbeda.
Absolute Path
Absolute path menunjukkan lokasi lengkap file dari root sistem operasi.
Contoh:
/Users/username/Desktop/app/sad.txt
Absolute path tidak bergantung pada lokasi direktori saat ini.
Perbedaan Path pada Sistem Operasi
Format file path dapat berbeda antara sistem operasi.
Mac, Linux, dan Unix
Sistem operasi berbasis Unix menggunakan forward slash / sebagai pemisah direktori.
Contoh:
/Users/username/Desktop/app/sad.txt
Contoh lainnya:
/home/username/Documents/file.txt
Windows
Windows menggunakan backslash \ sebagai pemisah direktori.
Contoh:
C:\Users\name\Desktop\file.txt
Perbedaan ini perlu diperhatikan ketika membuat program yang akan dijalankan pada sistem operasi yang berbeda.
Masalah Path pada Windows
Dalam Python, karakter backslash \ juga digunakan dalam escape sequence.
Contohnya:
"\n"
digunakan untuk newline.
Karena itu, penggunaan Windows path secara langsung dapat membutuhkan perhatian khusus.
Contoh:
path = "C:\\Users\\name\\Desktop\\file.txt"
Backslash perlu ditulis sebagai \\ agar dianggap sebagai karakter backslash.
Salah satu alasan penggunaan pathlib adalah untuk menghindari permasalahan tersebut.
Solusi Lintas Platform dengan pathlib
Python menyediakan modul bawaan bernama pathlib untuk bekerja dengan file path.
pathlib membantu membuat kode yang lebih mudah dibaca dan dapat menyesuaikan format path dengan sistem operasi yang digunakan.
Contoh:
from pathlib import Path
folder_path = Path("app") / "sad.txt"
with open(folder_path, mode="r") as my_file:
print(my_file.read())
Pada contoh tersebut:
Path("app")
membuat objek path untuk folder app.
Kemudian:
Path("app") / "sad.txt"
menggabungkan folder dan nama file menggunakan operator /.
Python akan menangani format path sesuai dengan sistem operasi.
Mengapa Menggunakan pathlib?
pathlib memiliki beberapa keuntungan:
- Lebih mudah dibaca.
- Membantu menangani perbedaan format path antar sistem operasi.
- Tidak perlu menulis pemisah direktori secara manual.
- Merupakan modul bawaan Python.
- Memudahkan operasi yang berkaitan dengan file dan direktori.
Contoh:
from pathlib import Path
file_path = Path("app") / "sad.txt"
with open(file_path, mode="r") as my_file:
print(my_file.read())
Kode tersebut dapat digunakan pada berbagai sistem operasi tanpa perlu menulis format slash secara manual.
Perbandingan Penulisan Path
Tanpa pathlib, kita dapat menulis:
with open("app/sad.txt", mode="r") as my_file:
print(my_file.read())
Dengan pathlib:
from pathlib import Path
file_path = Path("app") / "sad.txt"
with open(file_path, mode="r") as my_file:
print(my_file.read())
Pendekatan menggunakan pathlib menjadi lebih fleksibel ketika aplikasi harus berjalan pada beberapa sistem operasi.
Alur Memahami File Path
Konsep file path dapat diringkas menjadi:
File
│
├── Relative Path
│ ├── app/file.txt
│ ├── ./app/file.txt
│ └── ../file.txt
│
└── Absolute Path
└── /Users/username/Desktop/app/file.txt
Kemudian untuk membuat path yang lebih mudah digunakan lintas platform:
Pathlib
│
▼
Path("app") / "file.txt"
│
▼
File Path
Contoh Program Lengkap
Misalnya struktur project:
project/
├── main.py
└── app/
└── sad.txt
Isi sad.txt:
This is a text file.
Program menggunakan relative path:
with open("app/sad.txt", mode="r") as my_file:
print(my_file.read())
Program menggunakan pathlib:
from pathlib import Path
file_path = Path("app") / "sad.txt"
with open(file_path, mode="r") as my_file:
print(my_file.read())
Kedua pendekatan tersebut dapat digunakan untuk mengakses file yang sama.
Ringkasan
Konsep penting pada materi File Paths:
- File path menunjukkan lokasi sebuah file atau direktori.
- Relative path menggunakan direktori saat ini sebagai titik awal.
./menunjukkan direktori saat ini.../digunakan untuk berpindah satu tingkat ke direktori di atasnya.- Absolute path menunjukkan lokasi file secara lengkap dari root sistem operasi.
- Mac, Linux, dan Unix menggunakan
/sebagai pemisah direktori. - Windows menggunakan
\sebagai pemisah direktori. pathlibmerupakan modul bawaan Python untuk menangani file path.Path()dapat digunakan untuk membuat objek path.- Operator
/padapathlibdapat digunakan untuk menggabungkan direktori dan nama file. - Penggunaan
pathlibmembantu membuat kode yang lebih mudah dibaca dan lintas platform.