خانه / آموزش‌ها / آموزش ماژول Glob در پایتون (جستجوی فایل‌ها)

آموزش ماژول Glob در پایتون (جستجوی فایل‌ها)

🐍 HomeOfPython
|
📅 1404/10/16

ماژول Glob در پایتون ابزاری قدرتمند برای پیدا کردن نام فایل‌ها و دایرکتوری‌هایی است که با یک الگوی خاص مطابقت دارند. اگر با خط فرمان (Command Line) کار کرده باشید، احتمالا با الگوهایی مثل *.py آشنا هستید. Glob دقیقاً همین کار را در کد پایتون برای شما انجام می‌دهد.

در این مقاله، از مفاهیم اولیه جستجوی فایل تا تکنیک‌های پیشرفته و بهینه‌سازی عملکرد را بررسی خواهیم کرد.

نمودار عملکرد Glob

سطح مقدماتی (Beginner Level)

در این سطح با نحوه وارد کردن ماژول، استفاده از glob() و کاراکترهای ویژه (Wildcards) آشنا می‌شویم.

۱. شروع کار و مفهوم Wildcards

تابع اصلی این ماژول glob.glob() است که یک لیست از مسیرها را برمی‌گرداند. برای تعریف الگوها از سه علامت اصلی استفاده می‌شود:

  • *: منطبق بر هر تعداد کاراکتر (از صفر تا بی‌نهایت).
  • ?: منطبق بر دقیقاً یک کاراکتر.
  • []: منطبق بر یک محدوده از کاراکترها (مثل [a-z]).

مثال اول: استفاده از ستاره (*)

فرض کنید می‌خواهیم تمام فایل‌های با پسوند .txt را پیدا کنیم.

نکته: در کدهای اجرایی زیر (python-run)، ابتدا چند فایل نمونه می‌سازیم تا نتیجه واقعی را ببینید.

Python

مثال دوم: استفاده از علامت سوال (?)

علامت ? زمانی مفید است که طول نام فایل برای ما مهم است یا می‌خواهیم تنها یک حرف متغیر باشد.

Python

۲. محدوده‌های کاراکتری [ ]

با استفاده از براکت‌ها می‌توانیم جستجو را دقیق‌تر کنیم، مثلاً فقط فایل‌هایی که با عدد شروع می‌شوند یا حرف خاصی دارند.

python
# (Static Code) این تکه کد فقط ساختار الگو را نشان می‌دهد
# الگوی زیر فایل‌هایی مثل file1.txt, file2.txt, file3.txt را پیدا می‌کند
pattern = "file[0-9].txt"

# الگوی زیر فایل‌هایی که حرف اولشان a, b یا c است را پیدا می‌کند
pattern_letters = "[a-c]*.py"
Python

سطح پیشرفته (Professional Level)

در این بخش به سراغ جستجوی بازگشتی (Recursive)، مدیریت حافظه با iglob، مدیریت کاراکترهای خاص و مقایسه با pathlib می‌رویم.

۱. جستجوی بازگشتی (Recursive)

در پروژه‌های بزرگ، فایل‌ها در زیرپوشه‌های تودرتو قرار دارند. با استفاده از آرگومان recursive=True و الگوی ** می‌توانیم در تمام زیرپوشه‌ها جستجو کنیم.

مثال جستجوی عمیق

Python

۲. بهینه‌سازی حافظه با iglob

تابع glob.glob() تمام نتایج را همزمان در یک لیست بارگذاری می‌کند. اگر هزاران فایل داشته باشید، این کار حافظه زیادی مصرف می‌کند. تابع glob.iglob() یک Iterator برمی‌گرداند که فایل‌ها را یکی‌یکی تولید می‌کند.

python
# (Static Code) تعریف تابعی برای پردازش فایل‌های حجیم
import glob

def process_large_dataset(pattern):
    # استفاده از iglob برای جلوگیری از پر شدن حافظه
    file_iterator = glob.iglob(pattern, recursive=True)
    
    for file_path in file_iterator:
        # فایل‌ها یکی‌یکی پردازش می‌شوند
        print(f"Processing: {file_path}")
Python

۳. مدیریت کاراکترهای خاص (glob.escape)

اگر نام فایل شما واقعاً شامل کاراکترهای کنترلی مثل * یا ? یا [ باشد (مثلاً نام فایل report[1].txt باشد)، ماژول glob آن را به عنوان الگو تفسیر می‌کند. برای جستجوی خودِ این کاراکترها باید از escape استفاده کنید.

Python

۴. نکات تکمیلی و Pathlib

در پایتون مدرن (۳.۴ به بعد)، ماژول pathlib نیز متد glob را ارائه می‌دهد که شیء گرا است. اما ماژول استاندارد glob همچنان برای اسکریپت‌های ساده و سریع بسیار محبوب است.

نکته مهم دیگر ترتیب فایل‌ها است. glob تضمین نمی‌کند که فایل‌ها را به ترتیب حروف الفبا برگرداند (بستگی به فایل‌سیستم سیستم عامل دارد). اگر ترتیب مهم است، حتماً لیست را مرتب کنید.

python
# (Static Code) مرتب‌سازی نتایج
import glob

def get_sorted_files(pattern):
    files = glob.glob(pattern)
    files.sort() # یا sorted(glob.glob(pattern))
    return files
Python