تمرين إعادة البناء
دفتر جهات اتصال 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()اكتب هنا