Python: Menyenaraikan dan Menambah Semua Fail daripada Direktori ke Senarai

Python: Menyenaraikan dan Menambah Semua Fail daripada Direktori ke Senarai
Python

Menemui Pengurusan Fail dalam Python

Bekerja dengan direktori dan fail adalah tugas biasa dalam pengaturcaraan. Dalam Python, terdapat beberapa kaedah untuk menyenaraikan semua fail dalam direktori dan menyimpannya dalam senarai untuk pemprosesan selanjutnya.

Artikel ini akan meneroka cara yang cekap untuk mencapai ini, memberikan contoh dan penjelasan kod. Sama ada anda seorang pemula atau pengaturcara yang berpengalaman, teknik ini akan membantu menyelaraskan tugas pengurusan fail anda dalam Python.

Perintah Penerangan
os.listdir(directory) Mengembalikan senarai yang mengandungi nama entri dalam direktori yang ditentukan.
os.path.isfile(path) Menyemak sama ada laluan yang ditentukan ialah fail biasa sedia ada.
os.path.join(path, *paths) Menyertai satu atau lebih komponen laluan secara bijak, mengembalikan satu laluan.
Path(directory).iterdir() Mengembalikan iterator semua fail dan sub-direktori dalam direktori yang ditentukan.
file.is_file() Mengembalikan Benar jika laluan ialah fail biasa atau pautan simbolik ke fail.
os.walk(directory) Menjana nama fail dalam pepohon direktori, berjalan sama ada atas ke bawah atau bawah ke atas.

Memahami Traversal Direktori Python

Skrip yang disediakan di atas menggambarkan kaedah yang berbeza untuk menyenaraikan semua fail dalam direktori menggunakan Python. Skrip pertama menggunakan os modul, yang merupakan modul terbina dalam Python yang menyediakan cara menggunakan fungsi yang bergantung kepada sistem pengendalian. Dengan menggunakan os.listdir(directory), kita boleh mendapatkan senarai semua entri dalam direktori yang ditentukan. Kemudian, dengan mengulangi entri ini dan menyemak setiap satu dengan os.path.isfile(path), kami boleh menapis direktori dan hanya menambah fail pada senarai kami. Skrip kedua menggunakan pathlib modul, yang menawarkan pendekatan yang lebih berorientasikan objek kepada laluan sistem fail. Dengan menggunakan Path(directory).iterdir(), kami mendapat lelaran semua entri dalam direktori, dan dengan menapisnya dengan file.is_file(), kami hanya boleh mengumpul fail.

Skrip ketiga direka untuk penyenaraian fail yang lebih komprehensif, termasuk fail dalam subdirektori. Ia menggunakan os.walk(directory), penjana yang menghasilkan tuple laluan direktori, subdirektori dan nama fail untuk setiap direktori dalam pepohon yang berakar pada direktori yang ditentukan. Ini membolehkan kami melintasi pepohon direktori secara rekursif dan mengumpulkan semua nama fail. Skrip ini menunjukkan cara yang cekap untuk mengendalikan traversal direktori dalam Python, menawarkan kedua-dua kesederhanaan dengan os dan kefungsian dipertingkatkan dengan pathlib. Memahami arahan dan kaedah ini adalah penting untuk tugas pengurusan fail, memastikan fail dikenal pasti dan diproses dengan betul dalam struktur direktori.

Menyenaraikan Fail dalam Direktori Menggunakan Modul os Python

Menggunakan modul os untuk traversal direktori

import os

def list_files_os(directory):
    files = []
    for filename in os.listdir(directory):
        if os.path.isfile(os.path.join(directory, filename)):
            files.append(filename)
    return files

# Example usage
directory_path = '/path/to/directory'
files_list = list_files_os(directory_path)
print(files_list)

Mengambil Kandungan Direktori Menggunakan Modul pathlib Python

Menggunakan modul pathlib untuk penyenaraian fail

from pathlib import Path

def list_files_pathlib(directory):
    return [str(file) for file in Path(directory).iterdir() if file.is_file()]

# Example usage
directory_path = '/path/to/directory'
files_list = list_files_pathlib(directory_path)
print(files_list)

Penyenaraian Fail Rekursif dengan os.walk

Menggunakan os.walk untuk traversal direktori rekursif

import os

def list_files_recursive(directory):
    files = []
    for dirpath, _, filenames in os.walk(directory):
        for filename in filenames:
            files.append(os.path.join(dirpath, filename))
    return files

# Example usage
directory_path = '/path/to/directory'
files_list = list_files_recursive(directory_path)
print(files_list)

Teknik Penyenaraian Fail Lanjutan dalam Python

Di luar kaedah asas menyenaraikan fail dalam direktori menggunakan os dan pathlib modul, terdapat teknik yang lebih maju yang boleh digunakan untuk tugas khusus. Satu kaedah sedemikian adalah menggunakan glob modul, yang mencari semua nama laluan yang sepadan dengan corak yang ditentukan mengikut peraturan yang digunakan oleh shell Unix. Ini amat berguna untuk menyenaraikan fail dengan sambungan atau corak tertentu. Sebagai contoh, menggunakan glob.glob('*.txt') akan menyenaraikan semua fail teks dalam direktori semasa. Kaedah ini menyediakan cara yang fleksibel untuk menapis fail berdasarkan nama atau sambungannya tanpa perlu berulang secara manual melalui entri direktori.

Satu lagi teknik lanjutan ialah memanfaatkan fnmatch modul, yang menyediakan fungsi untuk membandingkan nama fail dengan corak glob gaya Unix. Ini boleh digunakan bersama dengan os.listdir() atau pathlib untuk menapis fail berdasarkan corak yang lebih kompleks. Sebagai contoh, fnmatch.filter(os.listdir(directory), '*.py') akan mengembalikan senarai semua fail Python dalam direktori yang ditentukan. Selain itu, untuk set data yang lebih besar atau aplikasi kritikal prestasi, menggunakan scandir daripada os modul boleh menjadi lebih cekap daripada listdir kerana ia mendapatkan semula atribut fail bersama-sama dengan nama fail, mengurangkan bilangan panggilan sistem. Memahami teknik lanjutan ini membolehkan penyelesaian pengurusan fail yang lebih berkuasa dan fleksibel dalam Python.

Soalan Lazim tentang Penyenaraian Direktori dalam Python

  1. Bagaimanakah saya menyenaraikan semua fail dalam direktori dan subdirektorinya?
  2. guna os.walk(directory) untuk melintasi pepohon direktori dan menyenaraikan semua fail.
  3. Bagaimanakah saya boleh menyenaraikan fail dengan sambungan tertentu?
  4. guna glob.glob('*.extension') atau fnmatch.filter(os.listdir(directory), '*.extension').
  5. Apakah perbezaan antara os.listdir() dan os.scandir()?
  6. os.scandir() adalah lebih cekap kerana ia mendapatkan semula atribut fail bersama-sama dengan nama fail.
  7. Bolehkah saya menyenaraikan fail tersembunyi dalam direktori?
  8. Ya, menggunakan os.listdir() akan menyenaraikan fail tersembunyi (yang bermula dengan titik).
  9. Bagaimanakah saya boleh mengecualikan direktori daripada senarai?
  10. guna os.path.isfile() atau file.is_file() dengan pathlib untuk menapis fail sahaja.
  11. Adakah mungkin untuk mengisih senarai fail?
  12. Ya, anda boleh menggunakan sorted() berfungsi pada senarai fail.
  13. Bagaimanakah saya boleh mengendalikan direktori besar dengan cekap?
  14. guna os.scandir() untuk prestasi yang lebih baik dengan direktori yang besar.
  15. Bolehkah saya mendapatkan saiz fail dan tarikh pengubahsuaian?
  16. Ya, gunakan os.stat() atau Path(file).stat() untuk mendapatkan semula metadata fail.
  17. Apakah modul yang terbaik untuk keserasian merentas platform?
  18. The pathlib modul disyorkan untuk keserasian merentas platform yang lebih baik.
  19. Bagaimanakah saya menyenaraikan direktori sahaja?
  20. guna os.path.isdir() atau Path(file).is_dir() untuk menapis direktori.

Membungkus Penyenaraian Direktori dalam Python

Kesimpulannya, Python menawarkan pelbagai cara untuk menyenaraikan fail dalam direktori, dari kaedah asas menggunakan fail os dan pathlib modul kepada teknik yang lebih maju melibatkan glob dan fnmatch. Setiap kaedah mempunyai kelebihan tersendiri, menjadikannya sesuai untuk kes penggunaan yang berbeza. Memahami teknik ini meningkatkan keupayaan anda untuk mengendalikan tugas pengurusan fail dengan cekap, memastikan anda boleh menyenaraikan dan memproses fail dengan tepat seperti yang diperlukan oleh aplikasi anda.