如何在CSV数据库的嵌套列表中搜索姓名并实现不存在时添加选项
实现CSV数据库的姓名搜索与添加提示功能
我来帮你搞定这个CSV搜索功能!咱们先看看你现有的代码已经把CSV内容读进lines列表里了,每个元素是包含姓名和客户编号的行数据。接下来只需要加几步就能实现搜索和判断逻辑:
第一步:完善搜索与判断逻辑
在你读取完CSV的代码后面,添加以下逻辑(我也调整了原代码里的小细节,比如去掉换行符避免干扰):
lines = [] user_name = input("PLEASE ENTER YOUR FIRST AND LAST NAME: ") with open("data_base.csv", "r") as in_file: for line in in_file: row = line.strip().split(",") # 加strip()去掉换行符和首尾空格 for i in range(1, len(row)): row[i] = eval(row[i]) lines.append(row) # 新增的搜索与判断核心逻辑 found = False for row in lines: # 假设姓名是每行的第一个元素(对应你示例里的['Mariana', ...]) # 用strip()避免输入或CSV里的空格导致匹配失败 if row[0].strip() == user_name.strip(): print(f"找到客户:{row[0]},客户编号:{row[1]}") found = True break # 找到第一个匹配项就停止遍历,若允许多个匹配可以去掉break if not found: print(f"未找到姓名为{user_name}的客户") choice = input("是否要添加该客户?(y/n): ") if choice.lower() == 'y': # 自动生成递增的客户编号:取现有最大编号+1,空文件则从1开始 if lines: max_id = max(row[1] for row in lines) new_id = max_id + 1 else: new_id = 1 # 追加写入CSV文件 with open("data_base.csv", "a") as out_file: out_file.write(f"\n{user_name.strip()},{new_id}") print(f"已添加客户:{user_name.strip()},客户编号:{new_id}") else: print("取消添加")
关键细节说明
- 精准匹配:用
strip()去除姓名两端的空格,避免输入时多打空格或者CSV里的空格导致匹配失败;如果需要忽略大小写,可以改成row[0].strip().lower() == user_name.strip().lower() - 存在性标记:用
found布尔变量记录是否找到目标姓名,遍历结束后根据这个变量触发不同的操作 - 自动编号:添加客户时自动生成递增编号,不用手动输入,避免重复或混乱
优化建议(可选)
你现在用split(",")处理CSV可能会有隐患(比如姓名里包含逗号的情况),更稳妥的方式是用Python内置的csv模块来读写,代码会更健壮:
import csv user_name = input("PLEASE ENTER YOUR FIRST AND LAST NAME: ") lines = [] # 用csv模块读取,自动处理特殊字符 with open("data_base.csv", "r") as in_file: reader = csv.reader(in_file) for row in reader: if len(row) >=2: row[1] = int(row[1]) # 转换客户编号为整数 lines.append(row) # 后续的搜索、判断、添加逻辑和上面一致...
这样处理包含特殊字符的字段会更可靠,避免手动拆分出错。
内容的提问来源于stack exchange,提问作者Python_ler
相关产品推荐
相关产品推荐

