AzLearn

تمرين إعادة البناء

دفتر جهات اتصال CSV

أضف وابحث في جهات اتصال محفوظة في ملف CSV محلي بسيط.

python ~25 دقيقة متوسط
أعد بناء الكود Rebuild

هذا هو الكود. اكتبه بنفسك.

الكود المرجعي
import argparse
import csv
from pathlib import Path


FIELDS = ["name", "email", "phone"]


def add_contact(path: Path, name: str, email: str, phone: str) -> None:
    exists = path.exists()
    with path.open("a", newline="", encoding="utf-8") as file:
        writer = csv.DictWriter(file, fieldnames=FIELDS)
        if not exists:
            writer.writeheader()
        writer.writerow({"name": name, "email": email, "phone": phone})


def search_contacts(path: Path, query: str) -> None:
    needle = query.lower()
    with path.open(newline="", encoding="utf-8") as file:
        for row in csv.DictReader(file):
            haystack = " ".join(row.values()).lower()
            if needle in haystack:
                print(f"{row['name']} <{row['email']}> {row['phone']}")


def main() -> None:
    parser = argparse.ArgumentParser(description="Add and search contacts in a local CSV file.")
    parser.add_argument("file", type=Path)
    subparsers = parser.add_subparsers(dest="command", required=True)
    add = subparsers.add_parser("add")
    add.add_argument("name")
    add.add_argument("email")
    add.add_argument("phone")
    find = subparsers.add_parser("find")
    find.add_argument("query")
    args = parser.parse_args()

    if args.command == "add":
        add_contact(args.file, args.name, args.email, args.phone)
        print("Added")
    else:
        search_contacts(args.file, args.query)


if __name__ == "__main__":
    main()
اكتب هنا