Bagaimanakah saya boleh mencari dan menyenaraikan fail dengan cekap dalam subfolder menggunakan Python?

Barbara Streisand
Lepaskan: 2024-10-29 23:23:29
asal
579 orang telah melayarinya

How can I efficiently search for and list files within subfolders using Python?

Carian Subfolder Rekursif dan Penyenaraian Fail

Ia adalah perkara biasa untuk menghadapi senario di mana anda perlu merentasi berbilang subfolder dan mengekstrak fail tertentu berdasarkan sambungan fail mereka. Satu pendekatan untuk menangani perkara ini ialah dengan memanfaatkan fungsi os.walk terbina dalam Python, yang membolehkan penerokaan rekursif direktori dan kandungannya.

Walau bagaimanapun, seperti yang ditemui dalam soalan ini, tingkah laku bermasalah timbul apabila cuba menggabungkan laluan fail. Pembolehubah subFolder yang dikembalikan oleh os.walk mewakili senarai subfolder dan bukannya folder khusus di mana setiap fail berada.

Untuk membetulkan isu ini, pendekatan yang betul ialah menggunakan dirpath (atau akar dalam kod yang diberikan) , yang mewakili direktori semasa untuk lelaran. Nilai dirpath hendaklah digabungkan dengan nama fail untuk membina laluan fail yang lengkap.

Selain itu, adalah penting untuk mempertimbangkan faktor tambahan seperti pemangkasan folder tertentu daripada proses rekursi, yang boleh dicapai dengan memeriksa dn (nama samaran) senarai. Untuk mengelakkan bergantung pada manipulasi rentetan untuk semakan sambungan fail, anda boleh memanfaatkan fungsi os.path.splitext.

Berikut ialah versi kod yang dioptimumkan yang menggabungkan peningkatan ini:

<code class="python">import os
result = [
    os.path.join(dp, f)
    for dp, dn, filenames in os.walk(PATH)
    for f in filenames
    if os.path.splitext(f)[1] == ".txt"
]</code>
Salin selepas log masuk

Sebagai alternatif, glob ialah satu lagi alat berkuasa yang boleh digunakan untuk memilih fail berdasarkan sambungannya. Berikut ialah contoh menggunakan glob:

<code class="python">import os
from glob import glob

result = [
    y
    for x in os.walk(PATH)
    for y in glob(os.path.join(x[0], "*.txt"))
]</code>
Salin selepas log masuk

Untuk Python 3.4 , Pathlib menyediakan pendekatan intuitif untuk tugasan ini:

<code class="python">from pathlib import Path

result = list(Path(".").rglob("*.[tT][xX][tT]"))</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencari dan menyenaraikan fail dengan cekap dalam subfolder menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!