求助:编写Python函数搜索CSV指定值并返回其右侧相邻值
原代码问题梳理
pandas.read_csv传参错误:第二个参数是分隔符配置项,不是文件打开模式,同时你的CSV没有表头,需要额外指定header=None避免把第一行数据识别为列名。- 变量命名冲突:循环变量直接使用了和入参
searchstring相同的命名,直接覆盖了传入的搜索目标值,逻辑完全错乱。 - 匹配逻辑错误:没有逐行匹配目标值,取值逻辑也不符合需求。
修正后可运行代码
依赖pandas版本
import pandas as pd def wordfinder(search_val): # 读取无表头CSV文件,指定分隔符为逗号 df = pd.read_csv('test.csv', header=None) # 匹配第二列的目标值(索引从0开始计数,第二列索引为1),取对应行第三列的值 match_rows = df[df[1] == search_val] if not match_rows.empty: res = match_rows.iloc[0, 2] print(res) return res # 无匹配结果时返回None,可根据需求调整返回值 return None # 测试调用 wordfinder(2888)
标准库无依赖版本
不需要安装pandas,直接用Python内置csv模块实现:
import csv def wordfinder(search_val): search_str = str(search_val) with open('test.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: if row[1] == search_str: # 可根据需求决定是否转成int类型返回 res = int(row[2]) print(res) return res return None
适配目标值可出现在任意列的版本
如果搜索目标不固定在第二列,需要匹配任意位置的目标值后取右侧相邻值,可使用下方实现:
def wordfinder(search_val): search_str = str(search_val) with open('test.csv', 'r', encoding='utf-8') as f: for line in f: row = line.strip().split(',') if search_str in row: idx = row.index(search_str) # 校验目标值不是行末尾元素,存在右侧相邻值 if idx < len(row) - 1: res = row[idx+1] print(res) return res return None
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

