You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python写入文本通讯录表格重复建表及搜索功能实现方案问询

解决方案

优先推荐使用JSON存储通讯录数据,刚好适配你后续要做的姓名搜索需求,实现简单且维护成本低,完全可以避免多表格重复生成的问题。

实现逻辑

  • 用JSON文件存储姓名:地址的键值对结构,搜索时直接按键查询即可,无需解析格式化文本
  • 每次新增联系人时先读取现有JSON数据,追加新条目后全量回写文件
  • 需要导出可视化表格时,一次性把全部数据传入PrettyTable生成完整表格,写入单独的TXT文件即可

完整实现代码

import sys
import json
from prettytable import PrettyTable

# 配置存储文件路径
DATA_FILE = "address_book.json"

def load_data():
    """加载现有通讯录数据"""
    try:
        with open(DATA_FILE, "r", encoding="utf-8") as f:
            return json.load(f)
    except FileNotFoundError:
        # 首次运行文件不存在时返回空字典
        return {}

def save_data(data):
    """保存通讯录数据到JSON文件"""
    with open(DATA_FILE, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

def menu():
    print("0- 退出 \n1 - 新增联系人 \n2 - 搜索地址 \n3 - 导出全部表格到TXT")
    choice = int(input("请输入选择: "))
    if choice == 1:
        add_contact()
    elif choice == 2:
        search_address()
    elif choice == 3:
        export_table()
    else:
        sys.exit()

def add_contact():
    data = load_data()
    while True:
        name = input("输入姓名(输入0返回菜单): ")
        if name == "0":
            save_data(data)
            menu()
            return
        if name in data:
            print("该姓名已存在,可直接搜索或更换其他姓名")
            continue
        addr = input("输入地址: ")
        data[name] = addr
        print("添加成功")

def search_address():
    data = load_data()
    name = input("输入要查询的姓名: ")
    if name in data:
        print(f"{name} 的地址是: {data[name]}")
    else:
        print("未找到该联系人")
    input("按任意键返回菜单")
    menu()

def export_table():
    data = load_data()
    table = PrettyTable(["姓名", "地址"])
    for name, addr in data.items():
        table.add_row([name, addr])
    with open("address_table.txt", "w", encoding="utf-8") as f:
        f.write(str(table))
    print("表格已导出到 address_table.txt")
    input("按任意键返回菜单")
    menu()

if __name__ == "__main__":
    menu()

优势说明

  • 数据结构清晰,修改、删除、查询操作都可以直接操作字典实现,不需要处理文本格式
  • 导出的TXT表格永远是完整的单表,不会出现多表重复、边框错位的问题
  • 搜索功能直接实现,效率远高于解析TXT表格

如果你一定要坚持用TXT直接追加表格的方式,可以在首次写入时生成表头和边框,后续新增时只写入对应长度的行内容和分隔线,但这种方式需要严格控制行内容长度,一旦姓名/地址长度变化就会导致表格错位,实用性很低,不推荐使用。


内容的提问来源于stack exchange,提问作者Miles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:36:04