خانه / آموزش‌ها / مدیریت سیستم و فایل‌ها در پایتون (os, sys, pathlib)

مدیریت سیستم و فایل‌ها در پایتون (os, sys, pathlib)

🐍 HomeOfPython
|
📅 1404/10/20

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

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

در این بخش با دو ماژول اصلی os (مخفف Operating System) و sys (مخفف System) آشنا می‌شویم.

۱. ماژول os و کار با دایرکتوری‌ها

ماژول os ابزار اصلی شما برای انجام کارهایی است که معمولاً در CMD یا Terminal انجام می‌دهید (مثل ساخت پوشه، دیدن لیست فایل‌ها و...).

دریافت مسیر فعلی و لیست فایل‌ها

برای اینکه بدانید برنامه شما کجاست و چه فایل‌هایی کنارش قرار دارند:

Python
python
# Example 2: List files in a specific path (Static - requires a real path)
import os

# لیست کردن فایل‌های درایو C در ویندوز
try:
    print(os.listdir("C:\\"))
except FileNotFoundError:
    print("Path not found on this system")

ساخت و حذف پوشه (Directory)

برای سازماندهی فایل‌ها نیاز به ساخت پوشه دارید.

python
# Example 3: Creating and removing directories (Static - modifies file system)
import os

# ساخت یک پوشه جدید
if not os.path.exists("new_folder"):
    os.mkdir("new_folder")
    print("Folder created!")

# حذف پوشه (باید خالی باشد)
os.rmdir("new_folder")
print("Folder deleted!")

۲. ماژول os.path (مدیریت مسیرها)

نوشتن آدرس فایل‌ها به صورت دستی (Hardcoding) کار اشتباهی است، چون در ویندوز از \ و در لینوکس از / استفاده می‌شود. os.path این مشکل را حل می‌کند.

ترکیب مسیرها (Joining Paths)

این متد به صورت هوشمند اسلش‌های لازم را اضافه می‌کند.

Python

بررسی وجود فایل

قبل از باز کردن یک فایل، بهتر است چک کنید که آیا وجود دارد یا خیر.

python
# Example 5: Checking existence (Static context)
import os

path = "config.ini"

if os.path.exists(path):
    print("فایل وجود دارد.")
else:
    print("فایل پیدا نشد.")

if os.path.isfile(path):
    print("این یک فایل است.")
    
if os.path.isdir(path):
    print("این یک پوشه است.")

۳. ماژول sys (اطلاعات مفسر پایتون)

ماژول sys بیشتر مربوط به تنظیمات و وضعیت خودِ مفسر پایتون (Python Interpreter) است تا سیستم عامل.

Python
python
# Example 7: Exiting the script (Static - stops execution)
import sys

print("Before exit")
sys.exit() # برنامه همینجا متوقف می‌شود
print("After exit") # اجرا نمی‌شود

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

در سطح حرفه‌ای، ما از روش‌های مدرن‌تر برای مدیریت فایل‌ها استفاده می‌کنیم و یاد می‌گیریم چگونه با ورودی‌های خط فرمان (CLI Arguments) و متغیرهای محیطی (Environment Variables) کار کنیم.

۱. ماژول pathlib (جایگزین مدرن os.path)

از نسخه ۳.۴ پایتون، ماژول pathlib معرفی شد که رویکرد شی‌گرا (Object-Oriented) به مسیرها دارد. این روش خواناتر و قدرتمندتر از os.path است.

کار با آبجکت Path

در اینجا مسیرها فقط رشته (String) نیستند، بلکه آبجکت هستند.

Python
python
# Example 9: Reading text quickly with pathlib (Static)
from pathlib import Path

file_path = Path("readme.txt")

# اگر فایل وجود داشته باشد، متن آن را می‌خواند
if file_path.exists():
    content = file_path.read_text(encoding='utf-8')
    print(content)

۲. پیمایش درخت دایرکتوری (os.walk)

اگر بخواهید تمام فایل‌های موجود در یک پوشه و تمام زیرپوشه‌های آن را جستجو کنید (مثلاً برای پیدا کردن همه فایل‌های .py)، بهترین ابزار os.walk است.

python
# Example 10: Recursive directory walk (Static)
import os

root_dir = "/var/www"

# این حلقه به صورت بازگشتی تمام پوشه‌ها را می‌گردد
for dirpath, dirnames, filenames in os.walk(root_dir):
    print(f"Scanning: {dirpath}")
    for file in filenames:
        if file.endswith(".log"):
            print(f"Found Log: {os.path.join(dirpath, file)}")

۳. ورودی‌های خط فرمان (sys.argv)

اسکریپت‌های حرفه‌ای معمولاً هنگام اجرا پارامتر می‌گیرند (مثلاً python script.py --input data.csv).

python
# Example 11: Reading Command Line Arguments (Static)
import sys

# sys.argv یک لیست است. عنصر اول همیشه نام خود اسکریپت است.
print(f"All arguments: {sys.argv}")

if len(sys.argv) > 1:
    filename = sys.argv[1]
    print(f"Processing file: {filename}")
else:
    print("لطفاً نام فایل را به عنوان آرگومان وارد کنید.")

۴. متغیرهای محیطی (os.environ)

برای امنیت، هرگز پسوردها یا API Keyها را در کد نمی‌نویسیم. آن‌ها را از Environment Variables سیستم می‌خوانیم.

Python

۵. مدیریت مسیر ایمپورت‌ها (sys.path)

پایتون برای پیدا کردن ماژول‌ها (import ...) به لیست sys.path نگاه می‌کند. شما می‌توانید این لیست را تغییر دهید تا از پوشه‌های غیر استاندارد ایمپورت کنید.

Python