Apabila mencari melalui subfolder dan membina senarai jenis fail tertentu, adalah penting untuk memastikan bahawa subfolder pembolehubah menunjuk ke folder yang betul. Coretan kod berikut menunjukkan isu ini:
<code class="python">for root, subFolder, files in os.walk(PATH): for item in files: if item.endswith(".txt"): fileNamePath = str(os.path.join(root, subFolder, item))</code>
Di sini, pembolehubah subFolder mengandungi senarai subfolder dan bukannya folder tempat fail ITEM berada. Untuk membetulkan ini, kita boleh menggunakan dirpath, yang diwakili oleh pembolehubah akar, kerana ia memegang laluan direktori yang betul. Coretan kod yang diubah suai ini menangani isu:
<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>
Satu lagi pendekatan elegan ialah menggunakan modul glob, yang memilih fail dengan cekap berdasarkan sambungannya:
<code class="python">from glob import glob result = [y for x in os.walk(PATH) for y in glob(os.path.join(x[0], '*.txt'))]</code>
Tawaran Python 3.4 dan ke atas versi penjana bagi penyelesaian berasaskan glob:
<code class="python">from itertools import chain result = (chain.from_iterable(glob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))</code>
Akhir sekali, untuk Python 3.4 , pendekatan moden menggunakan modul pathlib ialah:
<code class="python">from pathlib import Path result = list(Path(".").rglob("*.[tT][xX][tT]"))</code>
Atas ialah kandungan terperinci Bagaimana untuk Menyenaraikan Fail dengan Cekap daripada Subfolder Rekursif dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!