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>
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>
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>
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!