سطح مقدماتی (Beginner Level)
کتابخانه pathlib در نسخه ۳.۴ پایتون معرفی شد تا کار با مسیرهای فایل سیستم (File System Paths) را سادهتر و شیگرا (Object-Oriented) کند. قبل از pathlib، برنامهنویسان مجبور بودند از os.path استفاده کنند که صرفاً با رشتههای متنی (Strings) کار میکرد و مدیریت مسیرها در سیستمعاملهای مختلف (ویندوز در برابر لینوکس/مک) را دشوار میساخت.
۱. ساخت و تعریف مسیر (Creating Paths)
در pathlib، کلاس اصلی Path است. وقتی شما یک مسیر را تعریف میکنید، در واقع یک «شیء» (Object) میسازید، نه یک رشته متنی ساده. این باعث میشود بتوانید متدها را مستقیماً روی مسیر صدا بزنید.
مثال ۱: مسیر فعلی و مسیر خانه (Self-Executable)
در این مثال مسیر فعلی (Current Working Directory) و مسیر Home کاربر را دریافت میکنیم.
مثال ۲: تعریف مسیر جدید (Static)
این کد صرفاً نحوه تعریف یک مسیر خاص را نشان میدهد و به دلیل اینکه ممکن است این مسیر در کامپیوتر شما وجود نداشته باشد، به صورت استاتیک نمایش داده میشود.
from pathlib import Path
# تعریف مسیر در لینوکس/مک
p_linux = Path('/usr/bin/python3')
# تعریف مسیر در ویندوز (Pathlib به طور هوشمند جداکنندهها را مدیریت میکند)
p_windows = Path('C:/Users/Admin/Documents/Report.txt')
۲. اتصال مسیرها (Joining Paths)
یکی از بهترین ویژگیهای pathlib استفاده از عملگر اسلش / برای چسباندن پوشهها و فایلها به یکدیگر است. این کار جایگزین os.path.join شده است و خوانایی کد را بسیار بالا میبرد.
مثال ۱: استفاده از عملگر / (Self-Executable)
مثال ۲: ترکیب رشته و آبجکت Path (Self-Executable)
شما میتوانید آبجکت Path را با یک رشته ساده ترکیب کنید.
۳. بررسی وجود فایل و نوع آن (Existence & Type)
قبل از انجام عملیات روی یک فایل، باید مطمئن شویم که وجود دارد و آیا فایل است یا پوشه.
مثال ۱: بررسی وجود فایل (Self-Executable)
این اسکریپت بررسی میکند که آیا فایل جاری که در حال اجرای آن هستیم وجود دارد یا خیر.
مثال ۲: ساختار شرطی منطقی (Static)
یک الگوی رایج برای جلوگیری از خطا هنگام خواندن فایل.
from pathlib import Path
config_file = Path("config.json")
if config_file.exists() and config_file.is_file():
print("Loading configuration...")
else:
print("Config file not found.")
سطح پیشرفته (Professional Level)
در سطح حرفهای، pathlib ابزارهای قدرتمندی برای خواندن و نوشتن فایلها، جستجو (Globbing) و مدیریت فایل سیستم بدون نیاز به ایمپورتهای اضافی مثل os یا shutil (برای موارد ساده) ارائه میدهد.
۱. خواندن و نوشتن سریع (Read & Write Shortcuts)
کلاس Path متدهای read_text()، write_text()، read_bytes() و write_bytes() را دارد که نیاز به استفاده از بلوک with open(...) را برای کارهای ساده از بین میبرد. این متدها به طور خودکار فایل را باز میکنند، عملیات را انجام میدهند و فایل را میبندند.
مثال ۱: نوشتن و خواندن متن (Self-Executable)
در این مثال یک فایل موقت میسازیم، در آن مینویسیم و سپس محتویات آن را میخوانیم.
مثال ۲: مدیریت خطا در خواندن (Static)
برای پروژههای واقعی باید خطاهای احتمالی را مدیریت کنید.
from pathlib import Path
p = Path("data.bin")
try:
# خواندن به صورت باینری
data = p.read_bytes()
except FileNotFoundError:
print("Critical: File missing.")
except PermissionError:
print("Critical: Permission denied.")
۲. تجزیه اجزای مسیر (Path Components)
دسترسی به نام فایل، پسوند، نام بدون پسوند و دایرکتوری والد در pathlib بسیار آسان است.
مثال ۱: استخراج اطلاعات فایل (Self-Executable)
مثال ۲: تغییر نام/پسوند در حافظه (Self-Executable)
متد with_name و with_suffix فایل اصلی را تغییر نمیدهند، بلکه یک آبجکت مسیر جدید برمیگردانند. این برای تولید مسیرهای خروجی بسیار مفید است.
۳. جستجوی فایلها (Globbing)
متدهای .glob() و .rglob() (Recursive Glob) برای پیدا کردن فایلها بر اساس الگو (Pattern) استفاده میشوند. این متدها یک «Generator» برمیگردانند که برای کارایی حافظه عالی است.
مثال ۱: پیدا کردن تمام فایلهای پایتون (Static)
این کد تمام فایلهای .py را در پوشه جاری پیدا میکند.
from pathlib import Path
p = Path(".")
# لیست کردن تمام فایلهای .py
for py_file in p.glob("*.py"):
print(py_file.name)
مثال ۲: جستجوی بازگشتی (Recursive) (Static)
جستجو در تمام زیرپوشهها برای پیدا کردن فایلهای Markdown.
from pathlib import Path
src = Path("src/content")
# rglob معادل glob('**/*.md') است
md_files = list(src.rglob("*.md"))
print(f"Found {len(md_files)} markdown files.")
۴. مدیریت فایل و دایرکتوری (File & Dir Management)
شما میتوانید دایرکتوری بسازید، نام فایل را تغییر دهید (Rename) یا فایل را حذف کنید.
مثال ۱: ساخت دایرکتوری تودرتو (Static)
آرگومان parents=True باعث میشود اگر پوشههای والد وجود نداشتند، ساخته شوند (مشابه mkdir -p در لینوکس). exist_ok=True از بروز خطا در صورت وجود دایرکتوری جلوگیری میکند.
from pathlib import Path
new_dir = Path("data/2025/january")
new_dir.mkdir(parents=True, exist_ok=True)
مثال ۲: تغییر نام یا جابجایی (Renaming/Moving) (Self-Executable)
در اینجا یک فایل میسازیم و سپس نام آن را تغییر میدهیم.