Kahibaro
Discord Login Register

برنامه‌های ساده مبتنی بر فایل

مثال‌محور فکر کنید

در این بخش می‌خواهیم چند برنامهٔ کامل و کوچک بنویسیم که با فایل کار می‌کنند. فرض می‌کنیم قبلاً با مفاهیم کلی مثل «فایل چیست»، «خواندن و نوشتن فایل متنی» و «مسیر فایل‌ها» آشنا شده‌اید. این‌جا تمرکز روی این است که:

همهٔ مثال‌ها را می‌توانید در یک فایل مثل app.py ذخیره و اجرا کنید.


برنامه ۱: ذخیره و خواندن یادداشت‌های متنی ساده

هدف: ساخت یک «دفترچهٔ یادداشت» خیلی ساده که بتوانیم یادداشت بنویسیم و بعداً آن‌ها را ببینیم.

فایل: notes.txt

# برنامهٔ سادهٔ یادداشت‌ها
def show_menu():
    print("1) افزودن یادداشت جدید")
    print("2) نمایش همهٔ یادداشت‌ها")
    print("3) خروج")
while True:
    show_menu()
    choice = input("یک گزینه را انتخاب کنید: ")
    if choice == "1":
        note = input("متن یادداشت را وارد کنید: ")
        # 'a' یعنی افزودن به انتهای فایل (پاک نمی‌کند)
        with open("notes.txt", "a", encoding="utf-8") as f:
            f.write(note + "\n")
        print("یادداشت ذخیره شد.\n")
    elif choice == "2":
        try:
            with open("notes.txt", "r", encoding="utf-8") as f:
                content = f.read()
            if content.strip() == "":
                print("هنوز یادداشتی ثبت نشده است.\n")
            else:
                print("یادداشت‌ها:")
                print(content)
        except FileNotFoundError:
            print("فایل یادداشت هنوز وجود ندارد. ابتدا یادداشت اضافه کنید.\n")
    elif choice == "3":
        print("خدانگهدار!")
        break
    else:
        print("گزینهٔ نامعتبر. دوباره تلاش کنید.\n")

نکات مهمِ این برنامه:

برنامه ۲: شمارش تعداد خطوط، کلمات و کاراکترها در یک فایل

این برنامه یک فایل متنی می‌گیرد و یک آمار ساده از آن می‌دهد. این ایده، پایهٔ خیلی از ابزارهای تحلیلی است.

# برنامهٔ شمارش خطوط، کلمات و کاراکترها
file_name = input("نام فایل متنی را وارد کنید: ")
try:
    with open(file_name, "r", encoding="utf-8") as f:
        text = f.read()
    line_count = text.count("\n") + (1 if text else 0)
    # جدا کردن متن بر اساس فاصله برای شمارش کلمات (خیلی ساده و ابتدایی)
    words = text.split()
    word_count = len(words)
    char_count = len(text)
    print("تعداد خطوط:", line_count)
    print("تعداد کلمات:", word_count)
    print("تعداد کاراکترها:", char_count)
except FileNotFoundError:
    print("فایل پیدا نشد. مطمئن شوید نام فایل را درست وارد کرده‌اید.")

نکات مهم:

برنامه ۳: دفترچهٔ تلفن بسیار ساده (روی فایل متنی)

در این نسخهٔ خیلی ساده، هر خط یک «نام - شماره» است.

فایل: contacts.txt

# دفترچهٔ تلفن ساده
FILE_NAME = "contacts.txt"
def show_menu():
    print("1) افزودن مخاطب")
    print("2) جستجوی مخاطب")
    print("3) نمایش همهٔ مخاطبین")
    print("4) خروج")
def add_contact():
    name = input("نام مخاطب: ")
    phone = input("شمارهٔ تلفن: ")
    line = name + " - " + phone
    with open(FILE_NAME, "a", encoding="utf-8") as f:
        f.write(line + "\n")
    print("مخاطب ذخیره شد.\n")
def search_contact():
    keyword = input("نام یا بخشی از نام را وارد کنید: ")
    try:
        with open(FILE_NAME, "r", encoding="utf-8") as f:
            lines = f.readlines()
    except FileNotFoundError:
        print("هنوز مخاطبی ذخیره نشده است.\n")
        return
    found = False
    for line in lines:
        if keyword.lower() in line.lower():
            print(line.strip())
            found = True
    if not found:
        print("مخاطب مورد نظر پیدا نشد.\n")
    else:
        print()
def show_all():
    try:
        with open(FILE_NAME, "r", encoding="utf-8") as f:
            content = f.read()
        if content.strip() == "":
            print("هنوز مخاطبی ذخیره نشده است.\n")
        else:
            print("همهٔ مخاطبین:")
            print(content)
    except FileNotFoundError:
        print("هنوز مخاطبی ذخیره نشده است.\n")
while True:
    show_menu()
    choice = input("یک گزینه را انتخاب کنید: ")
    if choice == "1":
        add_contact()
    elif choice == "2":
        search_contact()
    elif choice == "3":
        show_all()
    elif choice == "4":
        print("خدانگهدار!")
        break
    else:
        print("گزینهٔ نامعتبر.\n")

نکات مهم:

برنامه ۴: کپی‌برداری ساده از یک فایل متنی

ایده: یک فایل متنی را بخوانیم و در فایل دیگری بنویسیم (نسخهٔ پشتیبان ساده).

# برنامهٔ کپی‌برداری از فایل متنی
source = input("نام فایل منبع: ")
target = input("نام فایل مقصد (مثلاً backup.txt): ")
try:
    with open(source, "r", encoding="utf-8") as f_src:
        content = f_src.read()
    with open(target, "w", encoding="utf-8") as f_dst:
        f_dst.write(content)
    print("کپی با موفقیت انجام شد.")
except FileNotFoundError:
    print("فایل منبع پیدا نشد.")

ایده‌های گسترش:

برنامه ۵: لیست کارها (To-Do) متنی

هر کار در یک خط ذخیره می‌شود. یک منوی خیلی ساده داریم:

فایل: todos.txt

# لیست کارهای خیلی ساده
FILE_NAME = "todos.txt"
def show_menu():
    print("1) افزودن کار جدید")
    print("2) نمایش همهٔ کارها")
    print("3) حذف همهٔ کارها")
    print("4) خروج")
def add_task():
    task = input("شرح کار: ")
    with open(FILE_NAME, "a", encoding="utf-8") as f:
        f.write(task + "\n")
    print("کار اضافه شد.\n")
def show_tasks():
    try:
        with open(FILE_NAME, "r", encoding="utf-8") as f:
            lines = f.readlines()
    except FileNotFoundError:
        print("هیچ کاری ثبت نشده است.\n")
        return
    if not lines:
        print("هیچ کاری ثبت نشده است.\n")
    else:
        print("فهرست کارها:")
        for i, line in enumerate(lines, start=1):
            print(f"{i}. {line.strip()}")
        print()
def clear_tasks():
    confirm = input("آیا مطمئن هستید که همهٔ کارها حذف شوند؟ (y/n): ")
    if confirm.lower() == "y":
        # خالی‌کردن فایل با حالت 'w'
        with open(FILE_NAME, "w", encoding="utf-8"):
            pass
        print("همهٔ کارها حذف شد.\n")
    else:
        print("حذف لغو شد.\n")
while True:
    show_menu()
    choice = input("یک گزینه را انتخاب کنید: ")
    if choice == "1":
        add_task()
    elif choice == "2":
        show_tasks()
    elif choice == "3":
        clear_tasks()
    elif choice == "4":
        print("خدانگهدار!")
        break
    else:
        print("گزینهٔ نامعتبر.\n")

ایده‌های بعدی برای گسترش همین برنامه (برای تمرین شخصی):

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

در مثال‌ها، چند «الگوی تکراری» می‌بینید که در اکثر برنامه‌های سادهٔ مبتنی بر فایل وجود دارند:

  1. گرفتن نام فایل یا ورودی کاربر
    • با input() و تبدیل/بررسیِ مقدارهای ورودی
  2. استفاده از with open(...): برای خواندن یا نوشتن
    • تقریبا همیشه این شکل را می‌بینید:
     with open("file.txt", "r", encoding="utf-8") as f:
         data = f.read()

یا:

     with open("file.txt", "a", encoding="utf-8") as f:
         f.write("something\n")
  1. کار با دادهٔ خوانده‌شده مثل یک رشته یا لیست
    • جداکردن به خط‌ها با readlines() یا splitlines()
    • جداکردن به کلمات با split()
    • شمارش با len()
  2. مدیریت خطاهای متداول (به‌خصوص FileNotFoundError)
    • اگر فایل هنوز ساخته نشده یا نام اشتباه است

ترکیب همین الگوهای ساده به شما امکان می‌دهد انواع برنامه‌های کوچک را بسازید: دفترچه، دفتر تلفن، لیست خرید، لاگ فعالیت‌ها، ذخیرهٔ امتیاز بازی و غیره.


تمرین پیشنهادی

برای تمرین و تثبیت:

  1. یکی از برنامه‌های بالا را انتخاب کنید و:
    • پیام‌ها و متن‌ها را به سلیقهٔ خودتان عوض کنید
    • نام فایل را تغییر دهید
    • یک گزینهٔ جدید به منو اضافه کنید
  2. خودتان یک برنامهٔ جدید تعریف کنید که:
    • اطلاعاتی را از کاربر بگیرد
    • آن‌ها را در فایل ذخیره کند
    • بعداً بتوانید آن‌ها را ببینید یا جستجو کنید

برای شروع، برنامه‌ای مثل «ثبت نمره‌های دانش‌آموزان» یا «ثبت مخارج روزانه» ایده‌های خیلی خوبی هستند.

Views: 4

Comments

Please login to add a comment.

Don't have an account? Register now!