Panduan Komprehensif Menggunakan pathlib di Python untuk Manipulasi Sistem Berkas
Temukan keunggulan pathlib Python dibandingkan modul os dengan mengeksplorasi objek path, komponen path, dan operasi path umum untuk interaksi sistem berkas.
Hingga baru-baru ini, manipulasi sistem berkas di Python terkenal sulit. Pengembang sering kesulitan dengan path berkas yang salah, yang rentan terhadap kesalahan karena memerlukan string panjang sebagai masukan. Selain itu, pengembang melaporkan kode mereka sering rusak karena ketidakseragaman di berbagai sistem operasi.
Untungnya, pada Python versi 3.4, pengembang memperkenalkan modul pathlib ke pustaka standar. pathlib memberikan solusi elegan untuk menangani path sistem berkas menggunakan pendekatan berorientasi objek yang telah lama ditunggu, dan juga memastikan perilaku yang agnostik platform.
Tutorial komprehensif ini akan mengajarkan Anda fitur-fitur modul pathlib untuk mendukung interaksi harian Anda dengan sistem berkas. Dengan pathlib, Anda akan mendapatkan alur kerja yang efisien dan pengambilan data yang mudah. pathlib telah matang secara signifikan selama bertahun-tahun, dan kami terus mengikuti perkembangannya agar Anda tidak perlu melakukannya. Mari mulai.
Modul os Python vs. pathlib
Sebelum Python 3.4, cara yang lebih tradisional untuk menangani path berkas adalah menggunakan modul os. Meskipun modul os dulunya sangat efektif, kini mulai terlihat usangnya.
Kita dapat menunjukkan nilai unik pathlib dengan mempertimbangkan tugas umum dalam data science: cara menemukan semua berkas png di dalam direktori tertentu dan semua subdirektorinya.
Jika kita menggunakan modul os, kita mungkin menulis kode berikut:
import os
dir_path ="/home/user/documents"
files =[
os.path.join(dir_path, f)for f in os.listdir(dir_path)if os.path.isfile(os.path.join(dir_path, f)) and f.endswith(".png")]Didukung oleh
Meskipun kode ini menyelesaikan tugas langsung untuk menemukan berkas png kita, ini mengungkap beberapa kelemahan besar modul os. Pertama, kodenya panjang dan hampir tidak terbaca, yang disayangkan mengingat ini operasi yang relatif sederhana. Kedua, kode kita mengasumsikan pengetahuan tentang list comprehension, yang tidak bisa dianggap sepele. Ketiga, kode melibatkan operasi string, yang rawan kesalahan. Dan di atas semua itu, kodenya tidak terlalu ringkas.
Jika, sebaliknya, kita menggunakan modul pathlib, kode kita akan jauh lebih sederhana. Seperti yang telah disebutkan, pathlib menyediakan pendekatan berorientasi objek untuk menangani path sistem berkas. Perhatikan:
from pathlib import Path
# Create a path object
dir_path = Path(dir_path)# Find all text files inside a directory
files =list(dir_path.glob("*.png"))Didukung oleh
Pemrograman berorientasi objek ini mengorganisasi kode di sekitar objek dan interaksinya, menghasilkan kode yang lebih modular, dapat digunakan ulang, dan mudah dipelihara. Jika Anda belum familiar dengan pemrograman berorientasi objek, ada baiknya mempelajarinya melalui kursus Object-Oriented Python Programming kami.
Bekerja dengan Objek Path di Python
Pustaka pathlib berpusat pada apa yang disebut objek Path, yang merepresentasikan path sistem berkas secara terstruktur dan independen platform.
Di awal tutorial ini, kita membawa kelas Path dari modul pathlib ke namespace saat ini menggunakan baris kode berikut:
Setelah memanggil kelas Path dari pathlib, kita dapat membuat objek Path dengan beberapa cara, termasuk dari string, dari objek Path lain, dari direktori kerja saat ini, dan dari direktori home.
Mari kita lihat masing-masing secara berurutan.
Membuat objek path dari string
Kita dapat membuat objek Path dengan meneruskan string yang merepresentasikan path sistem berkas ke sebuah variabel. Ini mengonversi representasi string dari path berkas menjadi objek Path.
file_path_str ="data/union_data.csv"
data_path = Path(file_path_str)Didukung oleh
Membuat objek path dari objek path lain
Objek Path yang sudah ada dapat dijadikan blok bangunan untuk membuat path baru.
Kita melakukan ini dengan menggabungkan basis path, direktori data, dan nama berkas menjadi satu path berkas. Kita harus ingat menggunakan garis miring ke depan jika perlu untuk memperluas objek Path kita.
Di sini kita menetapkan direktori kerja saat ini ke variabel cwd menggunakan metode Path.cwd(). Kita kemudian dapat mengambil path dari direktori kerja saat ini tempat skrip kita berjalan.
'/home/bexgboost/articles/2024/4_april/8_pathlib'Didukung oleh
Membuat objek path dari direktori home
Kita dapat membangun sebuah path dengan menggabungkan direktori home dengan subdirektori tambahan. Di sini kita menggabungkan direktori home dengan subdirektori "downloads" dan "projects."
home = Path.home()
home /"downloads"/"projects"Didukung oleh
PosixPath('/home/bexgboost/downloads/projects')Didukung oleh
Catatan penting: Kelas Path sendiri tidak melakukan operasi sistem berkas apa pun seperti validasi path, membuat direktori atau berkas. Kelas ini dirancang untuk merepresentasikan dan memanipulasi path. Untuk benar-benar berinteraksi dengan sistem berkas (memeriksa keberadaan, membaca/menulis berkas), kita harus menggunakan metode khusus dari objek Path dan untuk beberapa kasus lanjutan, dibantu modul os.
Bekerja dengan Komponen Path di Python
Atribut path berkas adalah berbagai properti dan komponen dari suatu path berkas yang membantu mengidentifikasi dan mengelola berkas serta direktori di dalam sistem berkas. Sama seperti alamat fisik memiliki bagian berbeda, seperti nomor jalan, kota, negara, dan kode pos, path sistem berkas dapat dipecah menjadi komponen yang lebih kecil. pathlib memungkinkan kita mengakses dan memanipulasi komponen-komponen ini menggunakan atribut path melalui notasi titik.
Bekerja dengan direktori root
Root adalah direktori paling atas dalam sistem berkas. Di sistem mirip Unix, ini direpresentasikan oleh garis miring ke depan (/). Di Windows, biasanya berupa huruf drive diikuti titik dua, seperti C:.
image_file = home /"downloads"/"midjourney.png"
image_file.rootDidukung oleh
[PosixPath('/home/bexgboost/downloads'),
PosixPath('/home/bexgboost'),
PosixPath('/home'),
PosixPath('/')]Didukung oleh
Operasi Path Umum Menggunakan pathlib
Objek Path memiliki banyak metode yang memungkinkan Anda berinteraksi secara efisien dengan direktori dan isinya. Mari lihat cara melakukan beberapa operasi yang paling umum.
Mendaftar direktori
Metode iterdir() memungkinkan Anda melakukan iterasi atas semua berkas dan subdirektori dalam sebuah folder. Ini sangat berguna untuk memproses semua berkas dalam direktori atau melakukan operasi pada setiap entri.
Karena objek Path hanya merepresentasikan path, terkadang Anda perlu memeriksa apakah sebuah path ada menggunakan metode .exists():
Metode .exists() memeriksa apakah sebuah path ada. Ini berguna karena objek Path dapat merepresentasikan berkas dan direktori yang mungkin ada atau tidak benar-benar hadir dalam sistem berkas.
pathlib juga menawarkan fungsionalitas untuk membuat dan menghapus berkas serta direktori. Mari lihat caranya.
Metode mkdir()
Metode mkdir() membuat direktori baru pada path yang ditentukan. Secara default, metode ini membuat direktori di direktori kerja saat ini.
from pathlib import Path
data_dir = Path("new_data_dir")# Create the directory 'new_data_dir' in the current working directory
data_dir.mkdir()Didukung oleh
Metode mkdir(parents=True)
Metode mkdir(parents=True) sangat berguna saat Anda ingin membuat struktur direktori di mana beberapa direktori induk mungkin belum ada. Menetapkan parents=True memastikan semua direktori induk yang diperlukan dibuat sepanjang proses.
sub_dir = Path("data/nested/subdirectory")# Create 'data/nested/subdirectory', even if 'data' or 'nested' don't exist
sub_dir.mkdir(parents=True)Didukung oleh
Perlu diingat bahwa mkdir() akan memunculkan pengecualian jika direktori dengan nama yang sama sudah ada.
FileExistsError: [Errno 17] File exists: 'data'Didukung oleh
Metode unlink()
Metode unlink() menghapus secara permanen berkas yang direpresentasikan oleh objek Path. Disarankan untuk memeriksa apakah berkas ada sebelum menjalankan metode ini agar tidak menerima error.
to_delete = Path("data/prices.csv")if to_delete.exists():
to_delete.unlink()print(f"Successfully deleted {to_delete.name}")Didukung oleh
Metode rmdir() menghapus direktori kosong. Ingat bahwa rmdir() hanya berfungsi untuk menghapus direktori kosong. Cara termudah untuk menghapus direktori yang tidak kosong adalah menggunakan pustaka shutil atau terminal.
empty_dir = Path("new_data_dir")
empty_dir.rmdir()Didukung oleh
Catatan: Harap berhati-hati saat menggunakan unlink() atau rmdir() karena hasilnya bersifat permanen.
Manipulasi Path Lanjutan
Mari lanjut ke beberapa konsep manipulasi path tingkat lanjut dan cara menerapkannya dalam praktik menggunakan pathlib.
Path relatif vs. absolut
Kita akan mulai dengan memahami perbedaan antara path absolut dan relatif, karena ini sering muncul.
Path relatif
Path relatif menentukan lokasi berkas atau direktori relatif terhadap direktori saat ini, karenanya disebut relatif. Path ini pendek dan fleksibel dalam proyek Anda tetapi bisa membingungkan jika Anda mengubah direktori kerja.
Sebagai contoh, saya memiliki folder images di direktori kerja saat ini, yang berisi berkas midjourney.png.
image = Path("images/midjourney.png")
imageDidukung oleh
Kode di atas berfungsi sekarang, tetapi jika saya memindahkan notebook yang saya gunakan ke lokasi berbeda, potongan kode ini akan rusak karena folder images tidak ikut berpindah bersama notebook.
Path absolut
Path absolut menentukan lokasi penuh dari sebuah berkas atau direktori mulai dari root sistem berkas. Path ini tidak bergantung pada direktori saat ini dan memberikan titik acuan yang jelas bagi siapa pun di mana pun dalam sistem.
image_absolute = Path("/home/bexgboost/articles/2024/4_april/8_pathlib/images/midjourney.png")
image_absoluteDidukung oleh
PosixPath('/home/bexgboost/articles/2024/4_april/8_pathlib/images/midjourney.png')Didukung oleh
Seperti yang Anda lihat, path absolut bisa sangat panjang, terutama dalam proyek kompleks dengan struktur pohon bertingkat. Karena alasan ini, kebanyakan orang lebih memilih path relatif yang lebih pendek.
Metode resolve
pathlib menyediakan metode untuk mengonversi path relatif menjadi absolut dengan metode resolve().
relative_image = Path("images/midjourney.png")
absolute_image = relative_image.resolve()
absolute_imageDidukung oleh
PosixPath('/home/bexgboost/articles/2024/4_april/8_pathlib/images/midjourney.png')Didukung oleh
Kita juga bisa melakukan sebaliknya: Jika kita memiliki path absolut, kita dapat mengonversinya menjadi path relatif berdasarkan direktori referensi.
relative_path = Path.cwd()
absolute_image.relative_to(relative_path)Didukung oleh
Untuk mengilustrasikan globbing, kita dapat kembali ke contoh yang kita perkenalkan di awal artikel, saat kita menulis kode untuk menemukan semua berkas png di direktori tertentu.
pathlib menggunakan modul bawaan .glob() untuk mencari berkas secara efisien yang cocok dengan pola tertentu di direktori mana pun. Modul ini sangat berguna saat memproses berkas dengan nama atau ekstensi serupa.
Metode glob bekerja dengan menerima string pola yang mengandung wildcard sebagai masukan dan mengembalikan sebuah objek generator yang menghasilkan objek Path yang cocok sesuai permintaan:
*: Mencocokkan nol atau lebih karakter.
?: Mencocokkan satu karakter apa pun.
[]: Mencocokkan rentang karakter di dalam tanda kurung siku (misalnya, [a-z] mencocokkan huruf kecil apa pun).
Untuk mengilustrasikan, mari coba menemukan semua notebook Jupyter di direktori artikel saya.
articles_dir = Path.home()/"articles"# Find all scripts
notebooks = articles_dir.glob("*.ipynb")# Print how many foundprint(len(list(notebooks)))Didukung oleh
Metode .glob() tidak menemukan notebook apa pun, yang sekilas tampak mengejutkan karena saya telah menulis lebih dari 150 artikel. Alasannya adalah .glob() hanya mencari di dalam direktori yang diberikan, bukan subdirektorinya.
Kita dapat menyelesaikannya dengan melakukan pencarian rekursif, yang memerlukan penggunaan metode rglob() dengan sintaks serupa:
notebooks = articles_dir.rglob("*.ipynb")print(len(list(notebooks)))Didukung oleh
Seperti yang telah kita lihat, objek Path hanya merepresentasikan berkas tetapi tidak melakukan operasi terhadapnya. Namun, objek ini memiliki metode tertentu untuk operasi berkas umum. Kita akan melihat cara menggunakannya di bagian ini.
Membaca berkas
Membaca isi berkas adalah operasi mendasar dalam banyak aplikasi Python. pathlib menyediakan metode singkat yang nyaman untuk membaca berkas sebagai teks atau byte mentah.
Metode read_text() memungkinkan kita membaca isi berkas teks dan menutup berkasnya.
file= Path("file.txt")print(file.read_text())Didukung oleh
Seperti yang kita lihat, metode write_text() menimpa teks. Meskipun tidak ada mode append untuk write_text(), kita dapat menggunakan read_text() dan write_text() bersama-sama untuk menambahkan teks di akhir berkas.
old_text =file.read_text()+"\n"
final_text ="This is the final text."# Combine old and new texts and write them backfile.write_text(old_text + final_text)print(file.read_text())Didukung oleh
This is new text.
This is the final text.Didukung oleh
write_bytes() bekerja dengan cara yang serupa. Untuk mengilustrasikan, mari duplikasi dulu gambar midjourney.png dengan nama baru.
original_image = Path("images/midjourney.png")
new_image = original_image.with_stem("duplicated_midjourney")
new_imageDidukung oleh
PosixPath('images/duplicated_midjourney.png')Didukung oleh
Metode with_stem() mengembalikan path berkas dengan nama berkas yang berbeda (meskipun sufiksnya tetap sama). Ini memungkinkan kita membaca gambar asli dan menulis isinya ke gambar baru.
new_image.write_bytes(original_image.read_bytes())Didukung oleh
rename() menerima path target, yang bisa berupa string atau objek path lain.
Untuk memindahkan berkas, Anda dapat menggunakan fungsi replace(), yang juga menerima path tujuan:
# Define the file to be moved
source_file = Path("new_file.txt")# Define the location to put the file
destination = Path("data/new/location")# Create the directories if they don't exist
destination.mkdir(parents=True)# Move the file
source_file.replace(destination / source_file.name)Didukung oleh
PosixPath('data/new/location/new_file.txt')Didukung oleh
Membuat berkas kosong
pathlib memungkinkan kita membuat berkas kosong menggunakan metode touch:
# Define new file path
new_dataset = Path("data/new.csv")
new_dataset.exists()Didukung oleh
Saat Anda perlu memesan sebuah nama berkas untuk digunakan nanti tetapi belum memiliki konten untuk ditulis saat ini, kita dapat menggunakan touch untuk membuat berkas kosong. Metode ini terinspirasi dari perintah touch di terminal Unix.
Perizinan dan informasi sistem berkas
Sebagai penutup, kita akan mempelajari cara mengakses karakteristik berkas menggunakan metode .stat(). Jika Anda familiar dengan os, Anda akan melihat bahwa metode baru ini memiliki keluaran yang sama dengan os.stat().
image_stats = original_image.stat()
image_statsDidukung oleh
Pengenalan modul pathlib di Python 3.4 telah menyederhanakan manipulasi sistem berkas secara signifikan bagi pengembang. Dengan menyediakan pendekatan berorientasi objek untuk menangani path berkas, pathlib memberikan cara yang terstruktur dan lugas untuk merepresentasikan path sistem berkas. pathlib juga menawarkan independensi platform, artinya pathlib menangani pemisah path secara konsisten di berbagai sistem operasi sehingga kode kita tidak rusak di mesin baru. Terakhir, pathlib menawarkan sekumpulan metode yang ringkas dan ekspresif untuk operasi sistem berkas umum, seperti yang telah kita lihat.
Saya adalah kreator konten data science dengan pengalaman lebih dari 2 tahun dan salah satu dengan jumlah pengikut terbesar di Medium. Saya suka menulis artikel mendalam tentang AI dan ML dengan sedikit gaya sarkastik—karena harus ada sesuatu untuk membuatnya tidak terlalu membosankan. Saya telah menghasilkan lebih dari 130 artikel dan satu kursus di DataCamp, dengan satu lagi sedang dalam proses. Konten saya telah dilihat oleh lebih dari 5 juta pasang mata, dan 20 ribu di antaranya menjadi pengikut di Medium dan LinkedIn.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Tingkatkan keterampilan pemrograman Anda. Pelajari cara mengoptimalkan kode, menulis fungsi dan tes, serta menggunakan teknik rekayasa perangkat lunak terbaik.
Hingga baru-baru ini, manipulasi sistem berkas di Python terkenal sulit. Pengembang sering kesulitan dengan path berkas yang salah, yang rentan terhadap kesalahan karena memerlukan string panjang sebagai masukan. Selain itu, pengembang melaporkan kode mereka sering rusak karena ketidakseragaman di berbagai sistem operasi.
Untungnya, pada Python versi 3.4, pengembang memperkenalkan modul
pathlibke pustaka standar.pathlibmemberikan solusi elegan untuk menangani path sistem berkas menggunakan pendekatan berorientasi objek yang telah lama ditunggu, dan juga memastikan perilaku yang agnostik platform.Tutorial komprehensif ini akan mengajarkan Anda fitur-fitur modul
pathlibuntuk mendukung interaksi harian Anda dengan sistem berkas. Denganpathlib, Anda akan mendapatkan alur kerja yang efisien dan pengambilan data yang mudah.pathlibtelah matang secara signifikan selama bertahun-tahun, dan kami terus mengikuti perkembangannya agar Anda tidak perlu melakukannya. Mari mulai.Modul os Python vs. pathlib
Sebelum Python 3.4, cara yang lebih tradisional untuk menangani path berkas adalah menggunakan modul
os. Meskipun modulosdulunya sangat efektif, kini mulai terlihat usangnya.Kita dapat menunjukkan nilai unik
pathlibdengan mempertimbangkan tugas umum dalam data science: cara menemukan semua berkaspngdi dalam direktori tertentu dan semua subdirektorinya.Jika kita menggunakan modul
os, kita mungkin menulis kode berikut:Meskipun kode ini menyelesaikan tugas langsung untuk menemukan berkas
pngkita, ini mengungkap beberapa kelemahan besar modulos. Pertama, kodenya panjang dan hampir tidak terbaca, yang disayangkan mengingat ini operasi yang relatif sederhana. Kedua, kode kita mengasumsikan pengetahuan tentang list comprehension, yang tidak bisa dianggap sepele. Ketiga, kode melibatkan operasi string, yang rawan kesalahan. Dan di atas semua itu, kodenya tidak terlalu ringkas.Jika, sebaliknya, kita menggunakan modul pathlib, kode kita akan jauh lebih sederhana. Seperti yang telah disebutkan,
pathlibmenyediakan pendekatan berorientasi objek untuk menangani path sistem berkas. Perhatikan:Pemrograman berorientasi objek ini mengorganisasi kode di sekitar objek dan interaksinya, menghasilkan kode yang lebih modular, dapat digunakan ulang, dan mudah dipelihara. Jika Anda belum familiar dengan pemrograman berorientasi objek, ada baiknya mempelajarinya melalui kursus Object-Oriented Python Programming kami.
Bekerja dengan Objek Path di Python
Pustaka
pathlibberpusat pada apa yang disebut objekPath, yang merepresentasikan path sistem berkas secara terstruktur dan independen platform.Di awal tutorial ini, kita membawa kelas
Pathdari modulpathlibke namespace saat ini menggunakan baris kode berikut:Setelah memanggil kelas
Pathdaripathlib, kita dapat membuat objekPathdengan beberapa cara, termasuk dari string, dari objekPathlain, dari direktori kerja saat ini, dan dari direktori home.Mari kita lihat masing-masing secara berurutan.
Membuat objek path dari string
Kita dapat membuat objek
Pathdengan meneruskan string yang merepresentasikan path sistem berkas ke sebuah variabel. Ini mengonversi representasi string dari path berkas menjadi objekPath.Membuat objek path dari objek path lain
Objek
Pathyang sudah ada dapat dijadikan blok bangunan untuk membuat path baru.Kita melakukan ini dengan menggabungkan basis path, direktori data, dan nama berkas menjadi satu path berkas. Kita harus ingat menggunakan garis miring ke depan jika perlu untuk memperluas objek
Pathkita.Membuat objek path dari direktori kerja saat ini
Di sini kita menetapkan direktori kerja saat ini ke variabel
cwdmenggunakan metodePath.cwd(). Kita kemudian dapat mengambil path dari direktori kerja saat ini tempat skrip kita berjalan.Membuat objek path dari direktori home
Kita dapat membangun sebuah path dengan menggabungkan direktori home dengan subdirektori tambahan. Di sini kita menggabungkan direktori home dengan subdirektori "downloads" dan "projects."
Catatan penting: Kelas
Pathsendiri tidak melakukan operasi sistem berkas apa pun seperti validasi path, membuat direktori atau berkas. Kelas ini dirancang untuk merepresentasikan dan memanipulasi path. Untuk benar-benar berinteraksi dengan sistem berkas (memeriksa keberadaan, membaca/menulis berkas), kita harus menggunakan metode khusus dari objekPathdan untuk beberapa kasus lanjutan, dibantu modulos.Bekerja dengan Komponen Path di Python
Atribut path berkas adalah berbagai properti dan komponen dari suatu path berkas yang membantu mengidentifikasi dan mengelola berkas serta direktori di dalam sistem berkas. Sama seperti alamat fisik memiliki bagian berbeda, seperti nomor jalan, kota, negara, dan kode pos, path sistem berkas dapat dipecah menjadi komponen yang lebih kecil.
pathlibmemungkinkan kita mengakses dan memanipulasi komponen-komponen ini menggunakan atribut path melalui notasi titik.Bekerja dengan direktori root
Root adalah direktori paling atas dalam sistem berkas. Di sistem mirip Unix, ini direpresentasikan oleh garis miring ke depan (
/). Di Windows, biasanya berupa huruf drive diikuti titik dua, sepertiC:.Bekerja dengan direktori induk
Induk berisi berkas atau direktori saat ini. Letaknya satu tingkat lebih tinggi relatif terhadap direktori atau berkas saat ini.
Bekerja dengan nama berkas
Atribut ini mengembalikan seluruh nama berkas, termasuk ekstensinya, sebagai string.
Bekerja dengan sufiks berkas
Atribut suffix mengembalikan ekstensi berkas, termasuk titiknya, sebagai string (atau string kosong jika tidak ada ekstensi).
Bekerja dengan stem berkas
Stem mengembalikan nama berkas tanpa ekstensi. Bekerja dengan stem bisa berguna saat mengonversi berkas ke format lain.
Catatan: Di Mac, path berkas peka huruf besar/kecil (case-sensitive), jadi
/Users/username/Documentsdan/users/username/documentsakan berbeda.Atribut parts pada pathlib
Kita dapat menggunakan atribut
.partsuntuk membagi objekPathmenjadi komponennya.Atribut parents pada pathlib
Atribut
parents, yang mengembalikan sebuah generator, mengubah komponen ini menjadi objekPath.Operasi Path Umum Menggunakan pathlib
Objek
Pathmemiliki banyak metode yang memungkinkan Anda berinteraksi secara efisien dengan direktori dan isinya. Mari lihat cara melakukan beberapa operasi yang paling umum.Mendaftar direktori
Metode
iterdir()memungkinkan Anda melakukan iterasi atas semua berkas dan subdirektori dalam sebuah folder. Ini sangat berguna untuk memproses semua berkas dalam direktori atau melakukan operasi pada setiap entri.Karena
iterdir()mengembalikan sebuah iterator, entri diambil sesuai permintaan saat Anda menjalani loop.Metode is_dir()
Metode
is_dir()mengembalikanTruejika path menunjuk ke direktori,Falsesebaliknya.Metode is_file()
Metode
.is_file()mengembalikanTruejika path menunjuk ke berkas,Falsesebaliknya.Metode exists()
Karena objek
Pathhanya merepresentasikan path, terkadang Anda perlu memeriksa apakah sebuah path ada menggunakan metode.exists():Metode .exists() memeriksa apakah sebuah path ada. Ini berguna karena objek
Pathdapat merepresentasikan berkas dan direktori yang mungkin ada atau tidak benar-benar hadir dalam sistem berkas.Membuat dan menghapus path
pathlibjuga menawarkan fungsionalitas untuk membuat dan menghapus berkas serta direktori. Mari lihat caranya.Metode mkdir()
Metode
mkdir()membuat direktori baru pada path yang ditentukan. Secara default, metode ini membuat direktori di direktori kerja saat ini.Metode mkdir(parents=True)
Metode
mkdir(parents=True)sangat berguna saat Anda ingin membuat struktur direktori di mana beberapa direktori induk mungkin belum ada. Menetapkanparents=Truememastikan semua direktori induk yang diperlukan dibuat sepanjang proses.Perlu diingat bahwa
mkdir()akan memunculkan pengecualian jika direktori dengan nama yang sama sudah ada.Metode unlink()
Metode
unlink()menghapus secara permanen berkas yang direpresentasikan oleh objekPath. Disarankan untuk memeriksa apakah berkas ada sebelum menjalankan metode ini agar tidak menerima error.Metode rmdir()
Metode
rmdir()menghapus direktori kosong. Ingat bahwarmdir()hanya berfungsi untuk menghapus direktori kosong. Cara termudah untuk menghapus direktori yang tidak kosong adalah menggunakan pustaka shutil atau terminal.Catatan: Harap berhati-hati saat menggunakan
unlink()ataurmdir()karena hasilnya bersifat permanen.Manipulasi Path Lanjutan
Mari lanjut ke beberapa konsep manipulasi path tingkat lanjut dan cara menerapkannya dalam praktik menggunakan
pathlib.Path relatif vs. absolut
Kita akan mulai dengan memahami perbedaan antara path absolut dan relatif, karena ini sering muncul.
Path relatif
Path relatif menentukan lokasi berkas atau direktori relatif terhadap direktori saat ini, karenanya disebut relatif. Path ini pendek dan fleksibel dalam proyek Anda tetapi bisa membingungkan jika Anda mengubah direktori kerja.
Sebagai contoh, saya memiliki folder images di direktori kerja saat ini, yang berisi berkas
midjourney.png.Kode di atas berfungsi sekarang, tetapi jika saya memindahkan notebook yang saya gunakan ke lokasi berbeda, potongan kode ini akan rusak karena folder images tidak ikut berpindah bersama notebook.
Path absolut
Path absolut menentukan lokasi penuh dari sebuah berkas atau direktori mulai dari root sistem berkas. Path ini tidak bergantung pada direktori saat ini dan memberikan titik acuan yang jelas bagi siapa pun di mana pun dalam sistem.
Seperti yang Anda lihat, path absolut bisa sangat panjang, terutama dalam proyek kompleks dengan struktur pohon bertingkat. Karena alasan ini, kebanyakan orang lebih memilih path relatif yang lebih pendek.
Metode resolve
pathlibmenyediakan metode untuk mengonversi path relatif menjadi absolut dengan metoderesolve().Kita juga bisa melakukan sebaliknya: Jika kita memiliki path absolut, kita dapat mengonversinya menjadi path relatif berdasarkan direktori referensi.
Globbing
Untuk mengilustrasikan globbing, kita dapat kembali ke contoh yang kita perkenalkan di awal artikel, saat kita menulis kode untuk menemukan semua berkas
pngdi direktori tertentu.pathlibmenggunakan modul bawaan.glob()untuk mencari berkas secara efisien yang cocok dengan pola tertentu di direktori mana pun. Modul ini sangat berguna saat memproses berkas dengan nama atau ekstensi serupa.Metode glob bekerja dengan menerima string pola yang mengandung wildcard sebagai masukan dan mengembalikan sebuah objek generator yang menghasilkan objek
Pathyang cocok sesuai permintaan:*: Mencocokkan nol atau lebih karakter.?: Mencocokkan satu karakter apa pun.[]: Mencocokkan rentang karakter di dalam tanda kurung siku (misalnya, [a-z] mencocokkan huruf kecil apa pun).Untuk mengilustrasikan, mari coba menemukan semua notebook Jupyter di direktori artikel saya.
Metode
.glob()tidak menemukan notebook apa pun, yang sekilas tampak mengejutkan karena saya telah menulis lebih dari 150 artikel. Alasannya adalah.glob()hanya mencari di dalam direktori yang diberikan, bukan subdirektorinya.Kita dapat menyelesaikannya dengan melakukan pencarian rekursif, yang memerlukan penggunaan metode
rglob()dengan sintaks serupa:Kali ini, kode kita menemukan semua 357 berkas.
Bekerja dengan berkas
Seperti yang telah kita lihat, objek
Pathhanya merepresentasikan berkas tetapi tidak melakukan operasi terhadapnya. Namun, objek ini memiliki metode tertentu untuk operasi berkas umum. Kita akan melihat cara menggunakannya di bagian ini.Membaca berkas
Membaca isi berkas adalah operasi mendasar dalam banyak aplikasi Python.
pathlibmenyediakan metode singkat yang nyaman untuk membaca berkas sebagai teks atau byte mentah.Metode
read_text()memungkinkan kita membaca isi berkas teks dan menutup berkasnya.Untuk berkas biner, kita dapat menggunakan metode
read_bytes().Ingat, saat menggunakan metode
read_*, penanganan error itu penting:Menulis berkas
Menulis ke berkas semudah membaca berkas. Untuk menulis berkas, kita memiliki metode
write_text().Seperti yang kita lihat, metode
write_text()menimpa teks. Meskipun tidak ada mode append untukwrite_text(), kita dapat menggunakanread_text()danwrite_text()bersama-sama untuk menambahkan teks di akhir berkas.write_bytes()bekerja dengan cara yang serupa. Untuk mengilustrasikan, mari duplikasi dulu gambarmidjourney.pngdengan nama baru.Metode
with_stem()mengembalikan path berkas dengan nama berkas yang berbeda (meskipun sufiksnya tetap sama). Ini memungkinkan kita membaca gambar asli dan menulis isinya ke gambar baru.Mengganti nama dan memindahkan berkas
Selain fungsi
with_stem()untuk mengganti stem berkas,pathlibmenawarkan metoderename()untuk mengganti nama secara lebih lengkap.rename()menerima path target, yang bisa berupa string atau objek path lain.Untuk memindahkan berkas, Anda dapat menggunakan fungsi
replace(), yang juga menerima path tujuan:Membuat berkas kosong
pathlibmemungkinkan kita membuat berkas kosong menggunakan metodetouch:Metode
touchawalnya dimaksudkan untuk memperbarui waktu modifikasi berkas, sehingga dapat digunakan juga pada berkas yang sudah ada.Saat Anda perlu memesan sebuah nama berkas untuk digunakan nanti tetapi belum memiliki konten untuk ditulis saat ini, kita dapat menggunakan touch untuk membuat berkas kosong. Metode ini terinspirasi dari perintah touch di terminal Unix.
Perizinan dan informasi sistem berkas
Sebagai penutup, kita akan mempelajari cara mengakses karakteristik berkas menggunakan metode
.stat(). Jika Anda familiar denganos, Anda akan melihat bahwa metode baru ini memiliki keluaran yang sama denganos.stat().Kita juga dapat mengambil ukuran berkas menggunakan notasi titik.
Kesimpulan
Pengenalan modul
pathlibdi Python 3.4 telah menyederhanakan manipulasi sistem berkas secara signifikan bagi pengembang. Dengan menyediakan pendekatan berorientasi objek untuk menangani path berkas,pathlibmemberikan cara yang terstruktur dan lugas untuk merepresentasikan path sistem berkas.pathlibjuga menawarkan independensi platform, artinyapathlibmenangani pemisah path secara konsisten di berbagai sistem operasi sehingga kode kita tidak rusak di mesin baru. Terakhir,pathlibmenawarkan sekumpulan metode yang ringkas dan ekspresif untuk operasi sistem berkas umum, seperti yang telah kita lihat.Perlu diingat,
pathlibadalah salah satu dari banyak pustaka bawaan yang kuat di Python. Dengan mengikuti Data Scientist With Python Career Track, Python Programming Skill Track, dan Intro to Python for Data Science, Anda akan menguasai beragam pustaka bawaan untuk menjadi pemrogram Python yang andal.Terima kasih telah membaca!