Kahibaro
Discord Login Register

فصل ۱۰: کار با فایل‌ها

چرا کار با فایل‌ها مهم است؟

تا اینجا بیشترِ برنامه‌هایی که نوشتید فقط با ورودیِ کاربر و خروجیِ روی صفحه کار می‌کردند. این برنامه‌ها بعد از بسته شدن، «چیزی به یاد نمی‌آورند».
کار با فایل‌ها به برنامهٔ شما این توانایی را می‌دهد که داده‌ها را ذخیره کند و بعداً دوباره از آن‌ها استفاده کند؛ مثل:

در این فصل به‌صورت مقدماتی یاد می‌گیرید چطور در پایتون:

مباحث جزئی‌تر در زیرعنوان‌های این فصل (مثل خواندن، نوشتن و مسیر فایل‌ها) جداگانه توضیح داده خواهند شد. اینجا روی «الگوی کلی کار با فایل» تمرکز می‌کنیم.

مفهوم کلی فایل در پایتون

برای این‌که پایتون بتواند با یک فایل کار کند، باید:

  1. فایل را «باز» کند (open)
  2. روی آن عملی انجام دهد (خواندن یا نوشتن)
  3. آن را «ببندد» (close)

در پایتون این کار با تابع open() انجام می‌شود که یک «شیء فایل» به شما برمی‌گرداند. با این شیء می‌توانید بخوانید، بنویسید و در پایان آن را ببندید.

الگوی کلی:

file_object = open("نام_فایل", "حالت")
# انجام عملیات روی فایل
file_object.close()

حالت‌های مرسوم باز کردن فایل

چند حالت (mode) پرکاربرد:

در همهٔ این حالت‌ها، اگر فقط "r", "w", "a" بنویسید، فایل به‌صورت متنی (text) باز می‌شود که برای این فصل کافی است.

نمونه: باز کردن یک فایل برای خواندن

f = open("notes.txt", "r")  # باز کردن برای خواندن
text = f.read()             # خواندن کل محتوا
print(text)
f.close()                   # بستن فایل

در فصل «خواندن فایل‌های متنی» روش‌های مختلف read() و خواندن خط‌به‌خط توضیح داده می‌شود.

نمونه: باز کردن یک فایل برای نوشتن

f = open("output.txt", "w")   # باز کردن برای نوشتن
f.write("سلام دنیا!\n")       # نوشتن در فایل
f.close()                     # بستن فایل

در فصل «نوشتن و افزودن به فایل‌ها» به تفاوت "w" و "a" و جزئیات write() بیشتر پرداخته می‌شود.

چرا بستن فایل مهم است؟

وقتی کارتان با یک فایل تمام شد، باید آن را ببندید:

تابع close() برای همین است:

f = open("data.txt", "r")
# کار با فایل
f.close()

البته در پایتون یک راه بهتر و امن‌تر وجود دارد: استفاده از with.

استفاده از with برای مدیریت خودکار فایل

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

الگوی کلی:

with open("نام_فایل", "حالت") as f:
    # کار با فایل از طریق f
    ...
# اینجا فایل خودبه‌خود بسته شده است

مثال خواندن:

with open("notes.txt", "r") as f:
    content = f.read()
    print(content)
# در این نقطه، f بسته شده است

مثال نوشتن:

with open("log.txt", "a") as log_file:
    log_file.write("برنامه اجرا شد.\n")

مزیت‌های with:

حالت متنی در برابر حالت باینری (نگاه خیلی کلی)

فایل‌ها را می‌توان به‌صورت:

پایتون برای حالت باینری از b در mode استفاده می‌کند، مثل "rb" یا "wb".
در این دوره، در فصل فعلی فقط با فایل‌های متنی سر و کار داریم و حالت باینری در سطح مقدماتی فقط معرفی می‌شود:

مثلاً برای خواندن یک تصویر:

with open("image.png", "rb") as img:
    data = img.read()

در پروژه‌های سادهٔ این دوره، معمولاً همان حالت متنی ("r", "w", "a") کافی است.

نکته‌هایی دربارهٔ نام و محل فایل‌ها

جزئیات کامل مسیر فایل‌ها در بخش «مسیر فایل‌ها» می‌آید؛ اینجا فقط چند نکتهٔ عملی:

مثال ساده:

with open("files/todo.txt", "r") as f:
    print(f.read())

الگوی کلی برنامه‌های مبتنی بر فایل

بسیاری از برنامه‌هایی که با دادهٔ پایدار سروکار دارند، از الگوی زیر پیروی می‌کنند:

  1. باز کردن فایل و خواندن دادهٔ قبلی (اگر وجود دارد)
  2. پردازش داده (با استفاده از مفاهیمی که قبلاً یاد گرفته‌اید: متغیرها، لیست‌ها، شرط‌ها، حلقه‌ها و...)
  3. باز کردن (یا ساختن) یک فایل و نوشتن دادهٔ جدید یا به‌روزشده
  4. بستن فایل (یا سپردن آن به with)

برای مثال، یک برنامهٔ بسیار سادهٔ ثبت نمرهٔ دانش‌آموزان می‌تواند:

در بخش «برنامه‌های ساده مبتنی بر فایل» نمونه‌های مشخص‌تری از این الگو خواهید دید.

نکات مقدماتی برای جلوگیری از خطا

وقتی شروع به کار با فایل‌ها می‌کنید، چند خطای متداول ممکن است رخ دهد:

برای شروع:

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

Views: 6

Comments

Please login to add a comment.

Don't have an account? Register now!