Apa itu Pathlib
Pathlib adalah sebuah modul di dalam library standar Python yang menyederhanakan cara Anda berinteraksi dengan sistem file. Modul ini menyediakan antarmuka berbasis objek untuk merepresentasikan path file dan menyediakan metode untuk melakukan operasi umum sistem file seperti membaca, menulis, dan memanipulasi file dan direktori.
Sebelum Python 3.4, pengembang harus mengandalkan modul os dan os.path untuk melakukan operasi sistem file. Namun, modul-modul ini agak sulit digunakan dan kurang memiliki antarmuka berbasis objek yang disediakan oleh pathlib.
Pathlib menyederhanakan operasi sistem file dengan menyediakan antarmuka tingkat tinggi yang dapat digunakan untuk memanipulasi path dan file. Dengan pathlib, Anda dapat dengan mudah membuat, membaca, menulis, dan memanipulasi file dan direktori tanpa perlu khawatir tentang pemisah path yang spesifik platform atau khawatir tentang menggabungkan path menggunakan manipulasi string.
Penggunaan Dasar Pathlib
Artikel ini akan membahas penggunaan dasar pathlib dan bagaimana hal itu menyederhanakan bekerja dengan path file.
Membuat Path
Untuk membuat objek Path
, Anda hanya perlu melewatkan sebuah string yang merepresentasikan path ke konstruktor Path
. Sebagai contoh:
from pathlib import Path
# Create a path object
path = Path('/usr/local/bin')
Anda juga dapat membuat objek Path
menggunakan path relatif.
# Create a path object using a relative path
path = Path('foo/bar')
Bekerja dengan Path
Pathlib menyediakan sejumlah metode untuk bekerja dengan path. Salah satu yang paling umum adalah metode joinpath()
, yang memungkinkan Anda untuk menggabungkan dua path. Sebagai contoh:
# Join two paths
path = Path('/usr/local').joinpath('bin')
Anda juga dapat mengakses bagian-bagian tertentu dari path menggunakan atribut seperti parent
, name
, dan suffix
. Sebagai contoh:
# Access parts of a path
path = Path('/usr/local/bin/python3')
print(path.parent) # /usr/local/bin
print(path.name) # python3
print(path.suffix) # .py
Pathlib juga menyediakan metode untuk memeriksa apakah path ada, mendapatkan ukuran file, dan menghapus file.
# Check if a path exists
print(path.exists())
# Get the size of a file
print(path.stat().st_size)
# Delete a file
path.unlink()
Metode Objek Path
Inti dari pathlib adalah kelas Path
, yang mewakili path file atau direktori secara independen dari platform. Objek Path
menyediakan sejumlah metode yang dapat digunakan untuk bekerja dengan path file dan direktori. Artikel ini akan menjelajahi beberapa metode yang paling umum digunakan pada objek Path
di pathlib dan memberikan contoh penggunaannya.
exists()
exists()
mengembalikan True
jika file atau direktori ada, False
jika tidak.
from pathlib import Path
# Create a Path object
file_path = Path('/path/to/my/file')
# Check if the file exists
if file_path.exists():
print('The file exists!')
is_file()
is_file()
mengembalikan nilai True
jika path merepresentasikan sebuah file, dan False
jika tidak.
from pathlib import Path
# Create a Path object
file_path = Path('/path/to/my/file')
# Check if the path is a file
if file_path.is_file():
print('The path is a file!')
is_dir()
is_dir()
mengembalikan nilai True
jika path merepresentasikan sebuah direktori, dan False
jika tidak.
from pathlib import Path
# Create a Path object
dir_path = Path('/path/to/my/directory')
# Check if the path is a directory
if dir_path.is_dir():
print('The path is a directory!')
name
name
mengembalikan nama dari file atau direktori tanpa path.
from pathlib import Path
# Create a Path object
file_path = Path('/path/to/my/file')
# Get the name of the file
file_name = file_path.name
print('File name:', file_name)
parent
parent
mengembalikan direktori parent dari file atau direktori.
from pathlib import Path
# Create a Path object
file_path = Path('/path/to/my/file')
# Get the parent directory of the file
parent_dir = file_path.parent
print('Parent directory:', parent_dir)
absolute()
absolute()
mengembalikan path absolut dari file atau direktori.
from pathlib import Path
# Create a Path object
file_path = Path('/path/to/my/file')
# Get the absolute path of the file
abs_path = file_path.absolute()
print('Absolute path:', abs_path)
glob(pattern)
glob(pattern)
Mengembalikan daftar objek Path yang sesuai dengan pola yang ditentukan.
from pathlib import Path
# Create a Path object for a directory
dir_path = Path('/path/to/my/directory')
# Get a list of all the PDF files in the directory
pdf_files = dir_path.glob('*.pdf')
for pdf_file in pdf_files:
print(pdf_file)
cwd()
cwd()
mengembalikan objek Path yang mewakili direktori kerja saat ini.
from pathlib import Path
current_directory = Path.cwd()
print(f"Current directory: {current_directory}")
Absolute Path dan Relative Path
Pathlib menyediakan cara untuk mengonversi antara absolute path dan relative path menggunakan metode resolve()
dan relative_to()
dari objek Path.
Metode resolve()
digunakan untuk mengonversi relative path menjadi absolute path. Metode ini tidak memerlukan argumen dan mengembalikan objek Path baru yang mewakili absolute path. Berikut adalah contoh penggunaannya:
from pathlib import Path
relative_path = Path('my_folder', 'my_file.txt')
absolute_path = relative_path.resolve()
print(f'Relative path: {relative_path}')
print(f'Absolute path: {absolute_path}')
Dalam contoh ini, kita membuat objek Path
baru yang mewakili relative path my_folder/my_file.txt
. Kemudian kita menggunakan metode resolve()
untuk mengonversinya menjadi absolute path. Output yang dihasilkan adalah:
Relative path: my_folder/my_file.txt
Absolute path: /full/path/to/my_folder/my_file.txt
Metode relative_to()
digunakan untuk mengonversi absolute path menjadi relative path. Metode ini memerlukan satu argumen, yaitu direktori dasar yang akan menjadi patokan relativitas dari relative path yang dihasilkan. Berikut adalah contoh penggunaannya:
from pathlib import Path
base_path = Path('/full/path/to/my_folder')
absolute_path = Path('/full/path/to/my_folder/my_file.txt')
relative_path = absolute_path.relative_to(base_path)
print(f'Absolute path: {absolute_path}')
print(f'Relative path: {relative_path}')
Dalam contoh ini, kita membuat dua objek Path yang masing-masing mewakili absolute path '/full/path/to/my_folder/my_file.txt'
dan direktori dasar '/full/path/to/my_folder'
. Kemudian kita menggunakan metode relative_to()
untuk mengonversi absolute path menjadi relative path yang berpatokan pada direktori dasar. Output yang dihasilkan adalah:
Absolute path: /full/path/to/my_folder/my_file.txt
Relative path: my_file.txt
Dengan menggunakan metode ini, Anda dapat dengan mudah mengonversi antara path absolut dan relatif dalam kode Anda, sehingga memudahkan Anda dalam bekerja dengan file dan direktori terlepas dari lokasinya di sistem file.
Menggabungkan Path
Menggabungkan path adalah operasi umum ketika bekerja dengan path file dan direktori dalam Python. Objek Path
dalam modul pathlib menyediakan cara sederhana untuk menggabungkan path menggunakan metode joinpath()
.
Metode joinpath()
menerima satu atau lebih argumen, yang bisa berupa string atau objek Path
lainnya. Ini menggabungkan path-path ini menjadi satu objek Path
baru. Berikut adalah contoh penggunaannya:
from pathlib import Path
path1 = Path('/Users/myuser')
path2 = Path('Documents', 'file.txt')
full_path = path1.joinpath(path2)
print(full_path)
Dalam contoh ini, kita membuat dua objek Path yang mewakili path /Users/myuser
dan Documents/file.txt
. Kemudian kita menggunakan metode joinpath()
untuk menggabungkan kedua path tersebut menjadi satu objek Path yang mewakili path lengkap /Users/myuser/Documents/file.txt
.
Anda juga bisa memberikan beberapa argumen pada joinpath()
sekaligus, seperti ini:
from pathlib import Path
path1 = Path('/Users/myuser')
path2 = 'Documents'
path3 = 'file.txt'
full_path = path1.joinpath(path2, path3)
print(full_path)
Ini akan menghasilkan output yang sama seperti contoh sebelumnya.
Anda juga bisa menggunakan operator /
untuk menggabungkan path. Ini sama dengan memanggil joinpath()
. Berikut adalah contoh penggunaannya:
from pathlib import Path
path1 = Path('/Users/myuser')
path2 = Path('Documents')
path3 = Path('file.txt')
full_path = path1 / path2 / path3
print(full_path)
Ini akan menghasilkan output yang sama seperti contoh sebelumnya.
Menangani Eksepsi dengan pathlib
Dalam setiap program yang berinteraksi dengan file dan direktori, selalu ada potensi terjadinya kesalahan. Misalnya, sebuah file mungkin tidak ada, sebuah direktori mungkin tidak dapat ditulis, atau program mungkin tidak memiliki izin yang diperlukan untuk mengakses file. Di Python, Anda dapat menggunakan eksepsi untuk menangani kesalahan ini dan menanganinya dengan sopan. Dalam artikel ini, saya akan membahas cara menangani eksepsi dengan pathlib.
Eksepsi dalam Pathlib
Pathlib memunculkan eksepsi ketika terjadi kesalahan. Eksepsi ini berasal dari kelas dasar OSError
dan menyediakan informasi tambahan tentang kesalahan. Beberapa eksepsi umum yang dipunculkan oleh pathlib meliputi:
FileNotFoundError
: dipunculkan ketika sebuah file atau direktori tidak ada.PermissionError
: dipunculkan ketika program tidak memiliki izin yang cukup untuk mengakses sebuah file atau direktori.NotADirectoryError
: dipunculkan ketika sebuah jalur yang diharapkan menjadi direktori sebenarnya bukan direktori.
Menangani Eksepsi dengan Blok Try-Except
Untuk menangani eksepsi yang dipunculkan oleh pathlib, Anda dapat menggunakan blok try-except. Ini memungkinkan Anda menangani kesalahan dengan sopan dan mencegah program Anda crash. Berikut adalah contohnya:
from pathlib import Path
# Create a path object for a file
file_path = Path('/path/to/my/file')
try:
# Open the file for reading
with file_path.open() as f:
contents = f.read()
except FileNotFoundError:
# Handle the error if the file doesn't exist
print('Error: File does not exist.')
except PermissionError:
# Handle the error if we don't have permission to access the file
print('Error: Permission denied.')
Dalam contoh ini, kita mencoba membuka sebuah file untuk dibaca menggunakan metode open()
. Jika file tidak ada, kita akan menangkap eksepsi FileNotFoundError dan menanganinya dengan mencetak pesan kesalahan. Begitu pula, jika kita tidak memiliki izin untuk mengakses file, kita akan menangkap eksepsi PermissionError
dan menanganinya dengan mencetak pesan kesalahan lainnya.
Contoh Kelas Pengelola Path
Berikut contoh kode untuk kelas pengelola jalur (path manager) yang mengembalikan jalur absolut dan jalur relatif:
from pathlib import Path
class PathManager:
def __init__(self):
self.root_path = Path(__file__).resolve().parents[2]
def get_absolute_path(self, path_str):
path = Path(path_str)
return path.resolve()
def get_relative_path(self, path_str):
path = Path(path_str)
return path.relative_to(self.root_path)
Metode __init__
menetapkan atribut root_path
ke direktori induk ketiga dari file saat ini, yang dapat digunakan sebagai jalur dasar untuk jalur relatif.
Metode get_absolute_path
mengambil string jalur dan mengembalikan jalur absolut menggunakan metode resolve()
dari kelas Path
.
Metode get_relative_path
mengambil string jalur dan mengembalikan jalur relatif dari root_path menggunakan metode relative_to()
dari kelas Path
.
Anda dapat menggunakan kelas ini seperti contoh berikut:
pm = PathManager()
abs_path = pm.get_absolute_path("data/file.txt")
rel_path = pm.get_relative_path("src/utils.py")
References