💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ Kawan azizpour
حذف فایل csv
محسن موحد حل شده توسط محسن موحد

سلام من در بخش اضافه کردن مخاطب به یه مشکل برخوردم

خلاصه بگم که پس از وارد کردن مخاطب جدید و بعد اینکه در contact ذخیره شد کل فایل csv حذف میشه 

def add_contact():

    print("add new contact")

    Name = input("Name: ")

    Last_name = input("Last name: ")

    phone = input("phone: ")


 

    if not phone.isdigit:

        raise ValueError("phone must be numeric")

   

    Nc = {"name": Name, "lastname": Last_name, "phone": phone}

    contacts.append(Nc)

    save_contact()

این تابعیه که نوشتم که تا جایی که میدونم کاملا شبیه مال دوره هستش

بجز نام گذاری و تعداد هدر نیم‌ها اگه جایی اشتباه کردم ممنون میشم کمک کنید

سلام،

کدتو بصورت کامل بزار، مشکل باید در تابع save_contact باشه.

محسن موحد ۲۳ تیر ۱۴۰۳، ۱۷:۰۹

سلام ممنون برای پاسخگویی سریع کدی که نوشتم به این صورت هست:

import csv


 

contacts = []


 

def read_contacts():

    with open("book_list.csv", "r") as rc:

        try:

            lines = csv.DictReader(rc)

            for row in lines:

                contacts.append(row)

        except FileNotFoundError:

            print("File dose not exisit")


 

read_contacts()


 

def save_contact():

    with open("book_list.csv", "w", newline="") as sc:

        header_name = ["name", "lastname", "phone"]

        writer = csv.DictWriter(sc, fieldnames=header_name)


 

        writer.writeheader()

        writer.writerow(contacts)


 

def view_contacts():

    print("your adress book:")

    for contact in contacts:

        print(f"Name: {contact["name"]}")

        print(f"Last name: {contact["lastname"]}")

        print(f"phone: {contact["phone"]}")

        print("_" * 30)


 

def add_contact():

    print("add new contact")

    Name = input("Name: ")

    Last_name = input("Last name: ")

    phone = input("phone: ")


 

    if not phone.isdigit:

        raise ValueError("phone must be numeric")

   

    Nc = {"name": Name, "lastname": Last_name, "phone": phone}

    contacts.append(Nc)

    save_contact()


 

while True:

    try:

        print("menu:")

        print("1. view contacts")

        print("2. add contacts")

        print("3. update contacts")

        print("4. delete contacts")

        print("5. Exit")

        option = int(input("choose what you want to do(1:5): "))

        if option == 1:

            view_contacts()

        elif option == 2:

            add_contact()

        elif option == 5:

            exit("End of simulation")

        else:

            print("invalid chooice")

    except Exception as e:

        print(f"Error: {e}")

و  این رو اضافه کنم که همچین اروری رو در اخر میده:

'list' object has no attribute 'keys'

 

Kawan azizpour ۲۳ تیر ۱۴۰۳، ۱۷:۳۰

اگر در انتهای تابع save_contact از writer.writerows بنویسید با s جمع مشکل اصلی حل میشود.

دو ایراد جزئی دیگر هم وجود دارد.

یک مورد اینکه در تابع add_contact در شرط پرانتزهای متد رو جاگذاشتید و باید بصورت phone.isdigit() بنویسید تا شرط بدرستی چک شود.

و مورد آخر اینکه وقتی یک رشته رو داخل دابل کوتیشن مینویسید اگر داخلش ایندکس آرایه رو خواستید بنویسید از سینگل کوتیشن استفاده کنید چون اگر دابل کوت بیارید، رشته قبلی بسته میشود و در ادامه هیچ concat ای هم صورت نمیگیره و موجب بروز خطا میشه. درستیش به شکل زیره:

print(f"Name: {contact['name']}")
print(f"Last name: {contact['lastname']}")
print(f"Phone: {contact['phone']}")

کد صحیح و فیکس شده رو در ادامه میارم:

import csv
contacts = []
def read_contacts():
    try:
        with open("book_list.csv", "r") as rc:
            lines = csv.DictReader(rc)
            for row in lines:
                contacts.append(row)
    except FileNotFoundError:
        print("File does not exist")
read_contacts()
def save_contact():
    with open("book_list.csv", "w", newline="") as sc:
        header_name = ["name", "lastname", "phone"]
        writer = csv.DictWriter(sc, fieldnames=header_name)
        writer.writeheader()
        writer.writerows(contacts)  # This line has been fixed.
def view_contacts():
    print("Your address book:")
    for contact in contacts:
        print(f"Name: {contact['name']}")  # This line has been fixed.
        print(f"Last name: {contact['lastname']}")  # This line has been fixed.
        print(f"Phone: {contact['phone']}")  # This line has been fixed.
        print("_" * 30)
def add_contact():
    print("Add new contact")
    Name = input("Name: ")
    Last_name = input("Last name: ")
    phone = input("Phone: ")
    if not phone.isdigit():  # This line has been fixed.
        raise ValueError("Phone must be numeric")
    Nc = {"name": Name, "lastname": Last_name, "phone": phone}
    contacts.append(Nc)
    save_contact()
while True:
    try:
        print("Menu:")
        print("1. View contacts")
        print("2. Add contacts")
        print("3. Update contacts")
        print("4. Delete contacts")
        print("5. Exit")
        option = int(input("Choose what you want to do (1-5): "))
        if option == 1:
            view_contacts()
        elif option == 2:
            add_contact()
        elif option == 5:
            exit("End of simulation")
        else:
            print("Invalid choice")
    except Exception as e:
        print(f"Error: {e}")
بهترین پاسخ
محسن موحد ۲۴ تیر ۱۴۰۳، ۰۳:۳۲
خیلی ممنون واقعا مفید بود.
Kawan azizpour ۲۴ تیر ۱۴۰۳، ۰۹:۴۷