Menampilkan Semua File Di Dalam Direktori Pada Pemrograman Python - CRUDPRO

Menampilkan Semua File Di Dalam Direktori Pada Pemrograman Python

Menampilkan Semua File Di Dalam Direktori Pada Pemrograman Python

Dapatkan Semua File Di Direktori Dan Subdirektori!

Pernahkah Anda mencari di Google untuk "Bagaimana cara mendaftar semua file direktori?" atau “Temukan semua file CSV di direktori menggunakan Python.”?

Maka artikel ini akan menjadi solusi satu atap untuk semua pertanyaan Anda.

Menjadi seorang profesional analitik, saya menggunakan Python dalam pekerjaan sehari-hari saya. Seringkali saya perlu menarik semua file dari folder dan sub-folder. Dan saya yakin Anda juga menemukan situasi serupa.

Oleh karena itu, saya merangkum 3 cara cepat untuk mengambil semua file dari direktori atau subdirektori. Dan selalu ada cara yang sesuai dengan kebutuhan Anda.

Untuk contohnya, saya menggunakan pola folder di bawah ini.

Menampilkan Semua File Di Dalam Direktori Pada Pemrograman Python

Jupyter-Notebook, yang akan membaca isi folder 01_Main_Directory ada di folder Challenges.

Mari kita mulai..

Tergantung pada tugas Anda, Anda dapat menggunakan satu atau kombinasi dari beberapa cara di bawah ini.

Saya akan mulai dengan cara yang paling sederhana.

Misalkan, Anda ingin membuat daftar semua file yang ada di folder 01_Main_Directory. Jadi, Anda dapat menggunakan fungsi yang secara harfiah mengatakan tujuannya dalam nama yaitu listdir()

os.listdir()

Modul Python os menyediakan fungsi ini dan seperti namanya, Anda bisa mendapatkan daftar semua file, folder, dan sub-folder yang ada di Path.

Sebelum menggunakan fungsi ini, jangan lupa untuk mengimport modul os. Dalam contoh ini, untuk membuat daftar semua file yang ada di 01_Main_Directory , yang perlu Anda lakukan adalah — menyediakan jalur ke folder ini dalam fungsi os.listdir(). Jika folder ini tidak ada di jalur Anda saat ini, maka Anda perlu menambahkannya ke jalur.

Tapi bagaimana cara mendapatkan jalur saat ini??

Anda dapat menggunakan fungsi lain os.getcwd() untuk mendapatkan jalur saat ini.

import os
os.getcwd()

#Output
'C:\\Users\\Suraj\\Challenges'

Seperti yang Anda lihat, jalur saat ini mengarah ke folder Tantangan di mana Juputer-Notebook ini disimpan.

Anda perlu menambahkan folder 01_Main_Directory ke jalur ini secara manual, untuk mendapatkan daftar semua file di dalamnya, seperti yang ditunjukkan di bawah ini.

import os
os.listdir(os.getcwd()+'\\01_Main_Directory')

#Output
['ABCD_1.docx',
 'ABCD_1.txt',
 'ABCD_2.txt',
 'ABCD_3.txt',
 'ABCD_4.txt',
 'ABCD_5.txt',
 'ABCD_5.xlsx',
 'Sub_Dictionary_1',
 'Sub_Dictionary_2']

Sederhana! Anda mendapatkan daftar semua file dalam folder.

Daftar ini berisi semua file dan sub-folder yang ada di jalur yang disediakan.

Atau, untuk mendapatkan daftar semua folder, subfolder, dan file di dalam subfolder, Anda dapat menggunakan fungsi yang lebih canggih dari modul os.

os.walk()

Seperti namanya, fungsi ini benar-benar akan memandu Anda melalui pohon direktori.

Metode ini di Python bekerja mirip dengan os.listdir(), tetapi alih-alih daftar semua konten di jalur yang disediakan, os.walk() mengembalikan tuple dari 3 elemen, yang berisi —

  1. folder_path: Jalur ke folder saat ini dan semua folder yang ada di folder saat ini
  2. folder: Daftar folder atau direktori yang ada di jalur yang disediakan
  3. file: Daftar file yang ada di jalur direktori yang disediakan dan sub-direktorinya

Mari kita lihat fungsi ini beraksi agar mudah dipahami!

path = os.getcwd()+'\\01_Main_Directory'
for folder_path, folders, files in os.walk(path):
    print(folder_path)
Menampilkan Semua File Di Dalam Direktori Pada Pemrograman Python

Baris pertama keluaran akan selalu menjadi jalur ke direktori saat ini atau yang disediakan sebagai masukan ke os.walk(). Ini diikuti oleh jalur ke sub-direktori dalam urutan abjad.

Untuk mendapatkan daftar semua folder di jalur yang disediakan, Anda dapat menggunakan variabel kedua di objek generator os.walk(), seperti yang ditunjukkan di bawah ini.

path = os.getcwd()+'\\01_Main_Directory'
for folder_path, folders, files in os.walk(path):
    print(folders)
Menampilkan Semua File Di Dalam Direktori Pada Pemrograman Python

mirip dengan folder_path, baris pertama dari output ini akan menjadi daftar semua sub-folder yang ada di jalur yang disediakan. Baris kedua dan ketiga mencantumkan folder yang ada di sub-folder ini.

Dalam contoh ini, tidak ada folder yang ada di Sub_Dictionary_1 dan Sub_Dictionary_2 . Jadi baris output yang tersisa menunjukkan daftar kosong.

Demikian pula, dengan menggunakan elemen terakhir dari tuple, Anda dapat mengambil semua file yang ada di jalur.

path = os.getcwd()+'\\01_Main_Directory'
for folder_path, folders, files in os.walk(path):
    print(files)
Menampilkan Semua File Di Dalam Direktori Pada Pemrograman Python

Karena semua file hanya ada di 01_Main_Directory, baris pertama output mencantumkan semua file.

Ini berguna khususnya ketika Anda hanya ingin melihat file mana yang ada di folder. Untuk bekerja dengan file-file ini, Anda memerlukan jalur file.

Dan di situlah modul lain — glob — akan membantu Anda mendapatkannya.

Glob — Perluasan pola nama jalur gaya Unix

Modul ini berguna untuk jalur file yang cocok dengan pola tertentu — ditentukan dalam fungsi glob() dalam modul glob Python. Pola yang harus Anda sebutkan dalam fungsi glob() harus mengikuti aturan perluasan jalur Unix.

Untuk mendapatkan jalur ke file di folder berikutnya, yang perlu Anda lakukan adalah menyediakan jalur ke folder tempat Anda menyimpan file. Dan Anda fleksibel untuk menyediakan jalur file absolut dan relatif.

Misalnya, Anda ingin mengambil semua file dalam 01_Main_Directory , yang perlu Anda lakukan hanyalah menyediakan jalur ke folder ini.

.
import glob
path = os.getcwd()+'\\01_Main_Directory'
for filepath in glob.glob(path):
    print(filepath)

#Output
C:\Users\Suraj\Challenges\01_Main_Directory

Ini hanya mengembalikan jalur ke 01_Main_Directory karena jalur yang disediakan di glob.glob() berakhir di folder ini.

Untuk mengambil semua file, Anda harus benar-benar menentukan jalur yang melampaui folder ini, seperti yang ditunjukkan di bawah ini.

<pre style="background-color: transparent; border: medium none;"><code class="python">path = os.getcwd()+'\\01_Main_Directory\\*'
for filepath in glob.glob(path):
    print(filepath)

#Output
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_1.docx
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_1.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_2.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_3.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_4.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_5.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_5.xlsx
C:\Users\Suraj\Challenges\01_Main_Directory\Sub_Dictionary_1
C:\Users\Suraj\Challenges\01_Main_Directory\Sub_Dictionary_2</code></pre>

Seperti yang Anda lihat, jalur di sini diperluas untuk masuk ke dalam folder 01_Main_Directory menggunakan . Di sini, tanda bintang (*) adalah karakter wildcard yang berarti pilih semua file di dalam folder.

Namun, seringkali Anda mengetahui bagian akhir dari nama file atau hanya beberapa karakter dari nama file tersebut.

Misalnya, Anda ingin mendapatkan semua jalur file dari folder ini yang berisi string 1 dalam namanya. Anda dapat menggunakan fungsi glob() dengan cara yang sangat sederhana seperti yang ditunjukkan di bawah ini.

path = os.getcwd()+'\\01_Main_Directory\\*1.*'
for filepath in glob.glob(path):
    print(filepath)

#Output
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_1.docx
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_1.txt

Ini mengambil semua nama file yang memiliki 1 di namanya, tetapi hasilnya berisi semua jenis file.

Bagaimana jika Anda hanya ingin menarik file .txt dari folder??

Sama seperti kasus penggunaan yang Anda lihat di atas, Anda perlu menulis sebuah pola. Tentu saja, file .txt akan memiliki .txt di bagian akhir. Dan Anda ingin mengambil semua file sehingga Anda dapat menggunakan tanda bintang wild card (*). Jadi pola yang Anda berikan di glob() adalah *.txt dan Anda dapat menggunakannya seperti yang ditunjukkan di bawah ini.

path = os.getcwd()+'\\01_Main_Directory\\*.txt'
for filepath in glob.glob(path):
    print(filepath)

#Output
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_1.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_2.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_3.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_4.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_5.txt

Yeahh Anda mendapatkan jalur ke semua file teks di folder. Demikian pula, untuk mendapatkan semua file .docx, Anda perlu menyediakan pola *.docx di dalam glob().

Selangkah lebih maju, misalkan Anda ingin mendapatkan semua file di sub-folderSub_Disctionary_1 dan Sub_Dictionary_2 juga, maka glob() adalah fungsi yang paling berguna.

Yang perlu Anda lakukan adalah menggunakan pola wildcard ** di jalur. Di sini Anda perlu mengatur parameter recursive=True , seperti yang ditunjukkan di bawah ini.

path = os.getcwd()+'\\01_Main_Directory\\**\\*.txt'
for filepath in glob.glob(path, recursive=True):
    print(filepath)

#Output
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_1.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_2.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_3.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_4.txt
C:\Users\Suraj\Challenges\01_Main_Directory\ABCD_5.txt
C:\Users\Suraj\Challenges\01_Main_Directory\Sub_Dictionary_1\File_1_in_SubDict_1.txt
C:\Users\Suraj\Challenges\01_Main_Directory\Sub_Dictionary_1\File_2_in_SubDict_1.txt
C:\Users\Suraj\Challenges\01_Main_Directory\Sub_Dictionary_2\File_1_in_SubDict_2.txt
C:\Users\Suraj\Challenges\01_Main_Directory\Sub_Dictionary_2\File_2_in_SubDict_2.txt

Pola ** di jalur akan cocok dengan semua direktori dan file yang ada di folder 01_Main_Dictionary.

Saya harap artikel ini dapat bermanfaat bagi kita semua. So Happy coding guys!