چگونه میتوان همه فایلهای یک دایرکتوری را در پایتون لیست کرد؟
برای لیست کردن همه فایلهای یک دایرکتوری در Python، چندین روش وجود دارد که بیشتر آنها از ماژولهای os و glob استفاده میکنند.
یکی از سادهترین روشها استفاده از os.listdir() است. این تابع همهچیز را در یک دایرکتوری بازگردانی میکند، شامل فایلها و دایرکتوریها. برای فهرست کردن فقط فایلها میتوان از os.path.isfile() استفاده کرد:
import os
from os.path import isfile, join
mypath = 'مسیر_دایرکتوری_شما'
onlyfiles = [f for f in os.listdir(mypath) if isfile(join(mypath, f))]
اگر بخواهید به طور بازگشتی به همه فایلها در زیر دایرکتوریها دسترسی پیدا کنید، میتوانید از os.walk() استفاده کنید. این تابع برای هر دایرکتوری که بازدید میکند، دو لیست برمیگرداند: یکی برای دایرکتوریها و دیگری برای فایلها.
from os import walk
f = []
for (dirpath, dirnames, filenames) in walk(mypath):
f.extend(filenames)
break # فقط فایلهای دایرکتوری اصلی را دریافت میکنیم
همچنین میتوانید با استفاده از next() تنها لیست فایلهای یک دایرکتوری را به دست آورید:
filenames = next(walk(mypath), (None, None, []))[2] # [] اگر هیچ فایلی وجود نداشته باشد
برای لیست کردن فایلها بر اساس الگوهای خاص (مثلن فایل های با پسوند txt)، ماژول glob نیز گزینه خوبی است:
import glob
# برای دریافت همه فایلها در دایرکتوری خاص
txtfiles = glob.glob("/home/adam/*.txt")
glob به طور خودکار فایلها و دایرکتوریهای شروعشده با نقطه (فایلهای مخفی) را در نظر نمیگیرد.
علاوه بر این، میتوانید از pathlib که از Python 3.4 به بعد معرفی شده، استفاده کنید. این ماژول یک روش شیگرا برای کار با مسیرها و فایلها ارائه می کند:
from pathlib import Path
flist = [p for p in Path('.').iterdir() if p.is_file()]