如何通过两列数据在CSV文件中精准查找对应行?
多条件精准匹配CSV行的问题解决
你需要通过名字(CSV第3列)和姓氏(CSV第4列)两个条件精准匹配目标行,但尝试的多条件代码因逻辑错误导致运行后无输出。
原单条件可运行代码
def searchByName(): name=input('Insert name:') csv_file=csv.reader(open('names.csv', encoding="utf8")) for row in csv_file: if name==row[3]: print(row)
错误的多条件代码
def searchByName(): fname=input('Insert name:') lname=input('enter last name:') csv_file=csv.reader(open('names.csv', encoding="utf8")) for row in csv_file: if fname==row[3] + lname==row[4]: print(row)
错误原因
你写的if条件 fname==row[3] + lname==row[4] 逻辑完全错误:Python会把它解析成(fname == (row[3] + lname)) == row[4]——先判断输入的名字是否等于「第3列内容+你输入的姓氏」,再把这个真假结果和第4列内容对比,这根本不是你要的「名字匹配第3列且姓氏匹配第4列」的逻辑,自然找不到符合的行。
正确的多条件匹配代码
import csv # 别忘导入csv模块,原代码可能遗漏 def searchByName(): fname = input('Insert first name: ') lname = input('Enter last name: ') # 用with语句管理文件,自动关闭避免资源泄漏 with open('names.csv', encoding="utf8") as f: csv_file = csv.reader(f) for row in csv_file: # 用and连接两个独立的相等判断,同时满足才输出 if fname == row[3] and lname == row[4]: print(row) # 调用函数执行 searchByName()
额外优化提示
- 如果CSV包含表头,可在循环前加
next(csv_file)跳过第一行 - 可以给输入和列内容加上
strip()处理,比如fname.strip() == row[3].strip(),避免因前后空格导致匹配失败
内容的提问来源于stack exchange,提问作者Sanso
相关产品推荐
相关产品推荐

