Python实现简单通讯录程序教程

沿途有光
沿途有光
发布时间:2026-10-12 | 3人浏览过
原创

本文详细演示如何用Python构建一个支持增删改查功能的通讯录程序,使用pickle模块保存联系人数据到文件。涵盖代码编写步骤、关键参数设置、完成验证方法及常见错误排查,帮助读者快速掌握基础编程实践。

Python通讯录程序概述

本程序旨在提供一个基础的联系人管理系统,允许用户通过命令行界面执行以下操作:添加新联系人、删除现有条目、修改邮箱信息、查询特定联系人详情以及列出全部记录。所有数据存储在名为friendab.data的文件中,利用Python内置的pickle模块实现序列化保存。该示例代码结构模块化,便于学习和二次开发。

准备条件

运行此程序需满足以下条件:

  • 已安装Python 3.x环境(推荐最新版)
  • 具备基础Python语法知识,如变量、函数、类定义和异常处理
  • 操作系统支持命令行交互(Windows/Linux/macOS通用)

完整代码实现

以下为修正后的Python 3兼容版本,包含注释说明各部分功能。复制下方代码块并保存为friendbook.py,然后在终端执行。

#!/usr/bin/env python3
import pickle
import sys
import os

# 初始通讯录数据,键为主键唯一标识,值为邮箱
default_contacts = {
    "Alice": "alice@example.com",
    "Bob": "bob@example.com",
    "Charlie": "charlie@example.com"
}

def save_data(data, filename):
    with open(filename, "wb") as f:
        pickle.dump(data, f)

def load_data(filename):
    if os.path.isfile(filename):
        with open(filename, "rb") as f:
            return pickle.load(f)
    return None

filename = "friendab.data"
data = load_data(filename)
if data is None:
    data = default_contacts.copy()
    save_data(data, filename)

while True:
    print("\n===== 通讯录管理 =====")
    print("[1] 查看联系人信息")
    print("[2] 添加新联系人")
    print("[3] 删除联系人")
    print("[4] 修改联系人邮箱")
    print("[5] 显示所有联系人")
    print("[6] 退出程序")
    choice = input("请选择操作编号 (1-6): ")

    if choice == "1":
        name = input("输入要查询的姓名: ")
        if name in data:
            print(f"联系人 {name} 的邮箱: {data[name]}")
        else:
            print("未在通讯录中找到该联系人。")
    elif choice == "2":
        name = input("输入新联系人姓名: ")
        email = input("输入邮箱地址: ")
        if name not in data:
            data[name] = email
            save_data(data, filename)
            print(f"成功添加: {name} -> {email}")
        else:
            print("该联系人已存在,请使用修改功能。")
    elif choice == "3":
        name = input("输入要删除的姓名: ")
        if name in data:
            del data[name]
            save_data(data, filename)
            print(f"已删除联系人: {name}")
        else:
            print("未找到该联系人。")
    elif choice == "4":
        name = input("输入要修改姓名的联系人: ")
        if name in data:
            new_email = input("输入新邮箱: ")
            data[name] = new_email
            save_data(data, filename)
            print(f"邮箱已更新: {name} -> {new_email}")
        else:
            print("未找到该联系人。")
    elif choice == "5":
        print("\n所有联系人:")
        for k, v in data.items():
            print(f"{k}: {v}")
    elif choice == "6":
        print("程序退出。再见!")
        break
    else:
        print("无效选项,请重新输入。")

第1步:导入依赖模块

目的:引入标准库以支持文件读写和数据序列化。
操作:在脚本头部添加import pickle, import os,分别用于pickle格式处理和文件存在性检测。
重要参数:无外部配置,仅需确保Python版本≥3.x。
完成状态:无语法错误,模块加载成功。

第2步:定义数据存储函数

目的:封装数据读取和写入逻辑,避免重复代码。
操作:创建save_data(data, filename)函数将字典数据转为二进制保存;load_data(filename)函数检查文件后返回字典或None。
重要参数:filename设为默认值"friendab.data";data为联系人字典。
完成状态:数据可安全存取,覆盖原文件中硬编码路径。

第3步:初始化通讯录数据库

目的:首次运行时自动填充测试数据,后续启动恢复上次保存内容。
操作:调用load_data()尝试加载文件;若为空则用default_contacts副本初始化并立即保存。
重要参数:文件名固定为friendab.data。
完成状态:控制台打印菜单时证明数据层就绪。

第4步:构建交互式主循环

目的:接收用户输入并分发至对应功能分支,持续运行直至手动退出。
操作:使用while True循环监听choice变量;根据编号调用相应逻辑块:
- 查询(1): 遍历data查找key,输出value或提示信息。
- 添加(2): 验证不重复后追加并刷新磁盘。
- 删除(3): 移除key并更新保存。
- 修改(4): 替换value项并重存。
- 列表(5): 遍历输出所有键值对。
- 退出(6): break结束循环。
重要参数:所有输入经raw_input/input捕获并转换;错误输入引导重试。
完成状态:菜单逐项响应正常,数据变更反映于下次启动。

代码解析与注意事项

原版示例代码存在若干需调整之处:① Python 3弃用了cPickle包而统一为pickle;②内置函数file()更名为open();③字符串格式化改用f-string替代旧式%占位符以提高可读性;④增加了对重复输入的防御机制防止异常中断。建议在实际使用中扩展错误捕获块(try/except IOError)应对磁盘故障场景,亦可集成图形界面库Tkinter提升体验。

常见问题排查

  • FileNotFoundError: 检查权限是否允许在当前目录生成friendab.data文件。
  • Pickle Protocol版本冲突: 不同Python版本间迁移文件时升级dump协议等级即可解决。
  • 乱码输出: 控制台编码设置为UTF-8可消除中文字符显示问题。
  • 内存占用过高: 对于大型通讯录考虑分页加载策略替代全量加载。

简要总结

通过以上步骤完成了基于Python控制台的通讯录工具搭建过程,覆盖了数据生命周期管理核心环节。尽管功能较为基础,却涵盖了字典操作、序列化IO流及事件驱动架构思想,非常适合作为进一步深入框架设计的起点案例。如需更复杂的关联查询或多端同步方案,则可延伸至数据库ORM层整合应用。以上就是Python实现简单通讯录程序的详细内容,更多关于Python基础编程实践的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表