Banyak program Python perlu menavigasi sistem berkas untuk membaca dan menulis file. Operasi umum adalah mengambil current working directory, yang sering disingkat menjadi CWD.
Python memiliki dua modul utama yang dapat digunakan untuk mengakses path sistem berkas: os module danpathlib module.
Modul os menawarkan pendekatan tradisional untuk mendapatkan current working directory dan bekerja dengan path serta sistem berkas.
Modul pathlib lebih baru dan menawarkan pendekatan berorientasi objek yang andal serta lintas platform.
Dalam tutorial ini, saya membahas berbagai teknik untuk mengambil dan memanipulasi current working directory. Jika Anda ingin mempelajari lebih lanjut tentang Python, silakan jelajahi beberapa tulisan blog saya lainnya:
Python: Cara Mendapatkan Current Working Directory (CWD)
Current working directory adalah direktori tempat program Python dijalankan. Direktori ini berfungsi sebagai titik acuan untuk path relatif dan memungkinkan program mengakses file dan sumber daya dalam hierarki direktori.
Mari kita lihat cara mengakses current working directory menggunakan modul os dan pathlib serta membandingkan kedua solusinya.
Menggunakan os.getcwd()
Modul os memungkinkan akses ke sistem operasi komputer. Fungsi getcwd() mengambil current working directory:
Keluaran menunjukkan path direktori yang berisi skrip. Format path bergantung pada sistem operasinya. Keluaran di atas adalah untuk sistem operasi POSIX seperti Linux, Unix, dan macOS.
Path yang sama pada sistem Windows akan ditampilkan sebagai berikut:
Oleh karena itu, kita perlu menggunakan metode string dan operasi string lainnya untuk menangani path ini.
Menggunakan pathlib.Path.cwd()
Python 3.4 memperkenalkan modul pathlib, yang menawarkan pendekatan berorientasi objek untuk mengakses dan memanipulasi path file. Kelas utama di pathlib adalah Path, yang dapat kita impor sebelum mendapatkan current working directory:
from pathlib import Path
cwd = Path.cwd()print(cwd)Didukung oleh
Keluaran dari Path.cwd() terlihat mirip dengan nilai yang dikembalikan oleh os.getcwd(). Namun, Path.cwd() tidak mengembalikan string. Kita dapat mengonfirmasinya dengan mencetak tipe objek yang dikembalikan atau menampilkan representasi string resminya menggunakan repr():
Sebisa mungkin, lebih baik menggunakan modul pathlib, yang lebih modern dan memudahkan pengelolaan path. Anda dapat membaca panduan lengkap menggunakan pathlib di Python jika ingin mempelajari lebih lanjut.
Bekerja dengan Direktori Saat Ini
Program Python sering kali perlu memanipulasi path, misalnya untuk menyimpan file di subfolder. Misalkan kita perlu membuat subdirektori baru di current working directory dan menyimpan file teks di folder baru tersebut.
Menggunakan modul os
Fungsi getcwd() dalam modul os mengembalikan string. Karena itu, dimungkinkan untuk mengubah string ini secara manual guna memodifikasi path. Namun, modifikasi yang diperlukan bervariasi tergantung pada sistem operasi karena setiap sistem memiliki format path yang berbeda. Opsi yang lebih baik adalah menggunakan os.path.join():
import os
cwd = os.getcwd()
output_path = os.path.join(cwd,"testing_os")print(output_path)Didukung oleh
/Users/sg/Documents/GitHub/datacamp/testing_osDidukung oleh
Path yang dikembalikan os.path.join() sudah dalam format yang benar untuk sistem operasi yang digunakan. Ini mengembalikan string dengan path baru. Kita dapat memeriksa apakah subfolder ini ada dengan os.path.exists(), yang mengembalikan nilai Boolean:
Ini menunjukkan bahwa path yang direpresentasikan oleh output_path belum ada. Modul os menyediakan alat untuk membuat folder ini. Fungsi os.mkdir() membuat direktori baru:
os.mkdir(output_path)print(os.path.exists(output_path))Didukung oleh
Subfolder baru sekarang ada, dan file baru dapat disimpan di folder ini:
output_file = os.path.join(output_path,"test.txt")withopen(output_file,"w")asfile:file.write("Testing path modification with the 'os' module")Didukung oleh
Variabel output_file berisi nama file keluaran yang diinginkan beserta path lengkapnya. File teks ini dibuat di subfolder /testing_os dalam current working directory.
Kita juga dapat menampilkan semua item dalam sebuah folder menggunakan os.listdir():
for item in os.listdir(output_path):print(item)Didukung oleh
Fungsi os.listdir() mengembalikan list berisi semua item di direktori. Kode ini melakukan iterasi melalui list tersebut untuk menampilkan setiap file atau folder pada baris terpisah. Dalam contoh ini, direktori berisi satu file teks.
Menggunakan modul pathlib
Modul pathlib yang lebih baru juga menyediakan alat untuk membuat path baru. Modul ini menggunakan operator garis miring / untuk menggabungkan elemen menjadi sebuah path. Ini adalah operator yang sama yang digunakan untuk pembagian tipe data numerik, tetapi juga merupakan karakter yang digunakan dalam path file di sistem operasi POSIX. Mari buat path baru dan periksa bahwa path tersebut belum ada:
from pathlib import Path
cwd = Path.cwd()
output_path = cwd /"testing_pathlib"print(output_path)print(Path.exists(output_path))Didukung oleh
/Users/sg/Documents/GitHub/datacamp/testing_pathlib
FalseDidukung oleh
Kelas Path memiliki metode .mkdir() sendiri untuk membuat direktori baru:
Path.mkdir(output_path)print(Path.exists(output_path))Didukung oleh
Karena output_path adalah objek PosixPath atau WindowsPath, kita dapat menggunakan operator garis miring di mana saja untuk membuat path baru:
withopen(output_path /"test.txt","w")asfile:file.write("Testing path modification with the 'pathlib' module")Didukung oleh
File teks baru dibuat di folder /testing_pathlib.
Kita dapat menggunakan metode Path.iterdir() untuk melakukan iterasi melalui setiap item dalam folder:
for item in Path.iterdir(output_path):print(item)Didukung oleh
/Users/sg/Documents/GitHub/datacamp/testing_pathlib/test.txtDidukung oleh
Seperti alat lainnya di pathlib, nilai yang dikembalikan bukan string. Sebaliknya, ini adalah objek PosixPath atau WindowsPath. Kita dapat menggunakan atribut .name untuk menampilkan nama file atau folder tanpa path lengkap:
for item in Path.iterdir(output_path):print(item.name)Didukung oleh
Jika os.listdir() mengembalikan list, pathlib.Path.iterdir() mengembalikan objek generator (Anda dapat membaca tutorial ini tentang Iterator dan Generator di Python jika Anda perlu penyegar):
<generator object Path.iterdir at 0x1036b2c20>Didukung oleh
Perilaku ini mengikuti praktik terbaik di Python modern karena iterator dan generator lebih efisien dalam situasi tertentu.
Mengubah Current Working Directory (CWD)
Kita juga dapat mengubah current working directory langsung dari dalam program Python menggunakan os.chdir(). Karena ini bukan operasi yang terkait langsung dengan path, tidak ada versi alternatif di pathlib. Namun, kita tetap dapat menggunakan objek pathlib.Path sebagai argumen:
import os
from pathlib import Path
cwd = Path.cwd()print(cwd)
os.chdir(cwd.parent)
cwd = Path.cwd()print(cwd)Didukung oleh
/Users/sg/Documents/GitHub/datacamp
/Users/sg/Documents/GitHubDidukung oleh
Working directory sekarang telah berubah. Kita juga dapat menggunakan cwd.parent.resolve() untuk memastikan tautan simbolik ditangani dengan benar. Argumen dalam os.chdir() juga dapat berupa string, seperti path yang dikembalikan oleh fungsi-fungsi dalam modul os.
Berhati-hatilah saat mengubah working directory di dalam program untuk memastikan tidak ada perilaku yang tidak terduga.
Praktik Terbaik dan Tips
Berikut beberapa praktik terbaik dan tips saat bekerja dengan path di Python:
Kesimpulan
Menavigasi dan memanipulasi path file adalah kebutuhan umum di banyak program Python. Modul os menyediakan fungsi tradisional untuk menangani tugas-tugas ini, sementara modul pathlib menawarkan pendekatan yang lebih modern dan berorientasi objek. Menggunakan pathlib tidak hanya menyederhanakan banyak operasi, tetapi juga memastikan kode Anda tetap lintas platform dan lebih mudah dibaca.
Baik Anda memelihara basis kode yang ada yang menggunakan os maupun memulai proyek baru di mana Anda dapat memanfaatkan pathlib, memahami kedua modul dan kemampuannya akan memberi Anda fleksibilitas dan kepercayaan diri untuk mengelola path di proyek Python apa pun.
Anda dapat melanjutkan perjalanan belajar Python Anda dengan kursus-kursus berikut:
Saya belajar Fisika dan Matematika pada tingkat sarjana di University of Malta. Kemudian, saya pindah ke London dan meraih gelar PhD dalam bidang Fisika dari Imperial College. Saya meneliti teknik optik baru untuk memindai retina manusia. Sekarang, saya berfokus menulis tentang Python, berkomunikasi tentang Python, dan mengajar Python.
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.
Banyak program Python perlu menavigasi sistem berkas untuk membaca dan menulis file. Operasi umum adalah mengambil current working directory, yang sering disingkat menjadi CWD.
Python memiliki dua modul utama yang dapat digunakan untuk mengakses path sistem berkas:
osmodule danpathlibmodule.Modul
osmenawarkan pendekatan tradisional untuk mendapatkan current working directory dan bekerja dengan path serta sistem berkas.Modul
pathliblebih baru dan menawarkan pendekatan berorientasi objek yang andal serta lintas platform.Dalam tutorial ini, saya membahas berbagai teknik untuk mengambil dan memanipulasi current working directory. Jika Anda ingin mempelajari lebih lanjut tentang Python, silakan jelajahi beberapa tulisan blog saya lainnya:
Python: Cara Mendapatkan Current Working Directory (CWD)
Current working directory adalah direktori tempat program Python dijalankan. Direktori ini berfungsi sebagai titik acuan untuk path relatif dan memungkinkan program mengakses file dan sumber daya dalam hierarki direktori.
Mari kita lihat cara mengakses current working directory menggunakan modul
osdanpathlibserta membandingkan kedua solusinya.Menggunakan
os.getcwd()Modul
osmemungkinkan akses ke sistem operasi komputer. Fungsigetcwd()mengambil current working directory:Keluaran menunjukkan path direktori yang berisi skrip. Format path bergantung pada sistem operasinya. Keluaran di atas adalah untuk sistem operasi POSIX seperti Linux, Unix, dan macOS.
Path yang sama pada sistem Windows akan ditampilkan sebagai berikut:
Nilai yang dikembalikan oleh
os.getcwd()adalah sebuah string:Oleh karena itu, kita perlu menggunakan metode string dan operasi string lainnya untuk menangani path ini.
Menggunakan
pathlib.Path.cwd()Python 3.4 memperkenalkan modul
pathlib, yang menawarkan pendekatan berorientasi objek untuk mengakses dan memanipulasi path file. Kelas utama dipathlibadalahPath, yang dapat kita impor sebelum mendapatkan current working directory:Keluaran dari
Path.cwd()terlihat mirip dengan nilai yang dikembalikan olehos.getcwd(). Namun,Path.cwd()tidak mengembalikan string. Kita dapat mengonfirmasinya dengan mencetak tipe objek yang dikembalikan atau menampilkan representasi string resminya menggunakanrepr():Di komputer Windows,
Path.cwd()mengembalikan objekWindowsPath.Objek
PosixPathdanWindowsPathmenyediakan fungsionalitas serupa untuk memungkinkan program lintas platform. Berikut beberapa atribut objek ini:Sebisa mungkin, lebih baik menggunakan modul
pathlib, yang lebih modern dan memudahkan pengelolaan path. Anda dapat membaca panduan lengkap menggunakan pathlib di Python jika ingin mempelajari lebih lanjut.Bekerja dengan Direktori Saat Ini
Program Python sering kali perlu memanipulasi path, misalnya untuk menyimpan file di subfolder. Misalkan kita perlu membuat subdirektori baru di current working directory dan menyimpan file teks di folder baru tersebut.
Menggunakan modul
osFungsi
getcwd()dalam modulosmengembalikan string. Karena itu, dimungkinkan untuk mengubah string ini secara manual guna memodifikasi path. Namun, modifikasi yang diperlukan bervariasi tergantung pada sistem operasi karena setiap sistem memiliki format path yang berbeda. Opsi yang lebih baik adalah menggunakanos.path.join():Path yang dikembalikan
os.path.join()sudah dalam format yang benar untuk sistem operasi yang digunakan. Ini mengembalikan string dengan path baru. Kita dapat memeriksa apakah subfolder ini ada denganos.path.exists(), yang mengembalikan nilai Boolean:Ini menunjukkan bahwa path yang direpresentasikan oleh
output_pathbelum ada. Modulosmenyediakan alat untuk membuat folder ini. Fungsios.mkdir()membuat direktori baru:Subfolder baru sekarang ada, dan file baru dapat disimpan di folder ini:
Variabel
output_fileberisi nama file keluaran yang diinginkan beserta path lengkapnya. File teks ini dibuat di subfolder/testing_osdalam current working directory.Kita juga dapat menampilkan semua item dalam sebuah folder menggunakan
os.listdir():Fungsi
os.listdir()mengembalikan list berisi semua item di direktori. Kode ini melakukan iterasi melalui list tersebut untuk menampilkan setiap file atau folder pada baris terpisah. Dalam contoh ini, direktori berisi satu file teks.Menggunakan modul
pathlibModul
pathlibyang lebih baru juga menyediakan alat untuk membuat path baru. Modul ini menggunakan operator garis miring/untuk menggabungkan elemen menjadi sebuah path. Ini adalah operator yang sama yang digunakan untuk pembagian tipe data numerik, tetapi juga merupakan karakter yang digunakan dalam path file di sistem operasi POSIX. Mari buat path baru dan periksa bahwa path tersebut belum ada:Kelas
Pathmemiliki metode.mkdir()sendiri untuk membuat direktori baru:Karena
output_pathadalah objekPosixPathatauWindowsPath, kita dapat menggunakan operator garis miring di mana saja untuk membuat path baru:File teks baru dibuat di folder
/testing_pathlib.Kita dapat menggunakan metode
Path.iterdir()untuk melakukan iterasi melalui setiap item dalam folder:Seperti alat lainnya di
pathlib, nilai yang dikembalikan bukan string. Sebaliknya, ini adalah objekPosixPathatauWindowsPath. Kita dapat menggunakan atribut.nameuntuk menampilkan nama file atau folder tanpa path lengkap:Jika
os.listdir()mengembalikan list,pathlib.Path.iterdir()mengembalikan objekgenerator(Anda dapat membaca tutorial ini tentang Iterator dan Generator di Python jika Anda perlu penyegar):Perilaku ini mengikuti praktik terbaik di Python modern karena iterator dan generator lebih efisien dalam situasi tertentu.
Mengubah Current Working Directory (CWD)
Kita juga dapat mengubah current working directory langsung dari dalam program Python menggunakan
os.chdir(). Karena ini bukan operasi yang terkait langsung dengan path, tidak ada versi alternatif dipathlib. Namun, kita tetap dapat menggunakan objekpathlib.Pathsebagai argumen:Working directory sekarang telah berubah. Kita juga dapat menggunakan
cwd.parent.resolve()untuk memastikan tautan simbolik ditangani dengan benar. Argumen dalamos.chdir()juga dapat berupa string, seperti path yang dikembalikan oleh fungsi-fungsi dalam modulos.Berhati-hatilah saat mengubah working directory di dalam program untuk memastikan tidak ada perilaku yang tidak terduga.
Praktik Terbaik dan Tips
Berikut beberapa praktik terbaik dan tips saat bekerja dengan path di Python:
Kesimpulan
Menavigasi dan memanipulasi path file adalah kebutuhan umum di banyak program Python. Modul
osmenyediakan fungsi tradisional untuk menangani tugas-tugas ini, sementara modulpathlibmenawarkan pendekatan yang lebih modern dan berorientasi objek. Menggunakanpathlibtidak hanya menyederhanakan banyak operasi, tetapi juga memastikan kode Anda tetap lintas platform dan lebih mudah dibaca.Baik Anda memelihara basis kode yang ada yang menggunakan
osmaupun memulai proyek baru di mana Anda dapat memanfaatkanpathlib, memahami kedua modul dan kemampuannya akan memberi Anda fleksibilitas dan kepercayaan diri untuk mengelola path di proyek Python apa pun.Anda dapat melanjutkan perjalanan belajar Python Anda dengan kursus-kursus berikut: