Traffine I/O

Bahasa Indonesia

2023-03-10

Modul Pathlib untuk Mempermudah Operasi Sistem File

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:

python
from pathlib import Path

# Create a path object
path = Path('/usr/local/bin')

Anda juga dapat membuat objek Path menggunakan path relatif.

python
# 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:

python
# 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:

python
# 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.

python
# 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.

python
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.

python
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.

python
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.

python
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.

python
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.

python
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.

python
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.

python
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:

python
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:

python
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:

python
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:

python
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:

python
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:

python
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:

python
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:

python
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:

python
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:

python
pm = PathManager()
abs_path = pm.get_absolute_path("data/file.txt")
rel_path = pm.get_relative_path("src/utils.py")

References

https://docs.python.org/3/library/pathlib.html

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!