Python使用lambda函数无法排序CSV文件及实现vlookup问题咨询
问题解答
一、CSV排序错误修复
排序未达预期的核心原因及修正点如下:
- 列索引取值错误:你的CSV列顺序为
VIP(索引0)、PROTOCOL(索引1)、PORT(索引2),你当前代码用x[2]是按PORT列排序,并非目标PROTOCOL列 - 表头参与排序:直接把所有行传入
sorted会导致表头和数据行一起排序,打乱结构 - 冗余代码:
with open上下文管理器会自动关闭文件,不需要手动调用close(),字符串形式的文件名需要加单引号包裹
修正后的排序代码:
import csv # 读取CSV,拆分表头和数据行 with open('svg.csv', 'r', encoding='utf-8') as open_file: rdr = csv.reader(open_file) header = next(rdr) # 提取表头单独存储 # 数据行按PROTOCOL列(索引1)排序 sort_data = sorted(rdr, key=lambda x: x[1]) # 写入排序后的内容,先写表头再写数据 with open('svg.csv', 'w', encoding='utf-8', newline='') as file_out: writr = csv.writer(file_out) writr.writerow(header) writr.writerows(sort_data)
二、Python实现CSV的VLOOKUP功能
VLOOKUP核心逻辑是指定查找列、查找值、返回列,匹配到对应行后返回目标列内容,可以通过csv.DictReader直接用列名操作,不需要手动计算索引:
import csv def csv_vlookup(lookup_col, lookup_value, return_col, csv_path='svg.csv'): with open(csv_path, 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: if row[lookup_col] == lookup_value: return row[return_col] # 无匹配结果返回空值 return None # 测试用例:查找vip2对应的HEALTH状态 print(csv_vlookup('VIP', 'vip2', 'HEALTH')) # 输出结果为no
如果需要批量查询,可以提前把查询键和返回值生成映射字典,避免重复读取文件:
# 生成VIP对应PORT的映射表 vip_port_map = {} with open('svg.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: vip_port_map[row['VIP']] = row['PORT'] # 批量查询直接查字典即可 print(vip_port_map.get('vip3')) # 输出结果为80
内容的提问来源于stack exchange,提问作者fatima ghaiyur hayat
相关产品推荐
相关产品推荐

