Python如何将CSV文件列值作为函数参数遍历调用函数
实现方案
你当前使用的csv.DictReader本身已经是支持逐行迭代的对象,不需要额外将整个Reader对象转换为字典存储,你原代码里list_of_csv = dict(csv_reader)的写法是错误的:该写法会把每行第一列的值作为键、整行内容作为值生成嵌套字典,完全不符合逐行取参数的需求。
你使用的CSV为分号分隔格式,内容如下:
name;subnet name_a;192.168.111.0/24 name_b;192.168.168.0/24 name_c;192.168.29.0/24
正确实现代码
直接遍历DictReader输出的行对象即可,逐行取出对应列的值传入函数,这种写法内存效率最高,大文件场景下也不会占用过多内存:
import csv # 示例自定义函数,替换成你自己的业务逻辑即可 def handle_address(name: str, subnet: str): # 比如你的逻辑:创建防火墙地址对象、做网段校验等 print(f"处理条目 名称:{name} 网段:{subnet}") csv_file_path = "你的csv文件实际路径.csv" with open(csv_file_path, mode='r', encoding='utf-8-sig') as f: reader = csv.DictReader(f, delimiter=';') # 直接逐行遍历 for row in reader: # 按表头名取对应列的值,作为参数传入函数 handle_address(name=row["name"], subnet=row["subnet"])
可选场景说明
- 如果你需要在文件关闭后反复使用CSV内的所有数据,可以在读取时把所有行转成列表存储:
csv_rows = list(reader),后续遍历csv_rows的逻辑和上面完全一致,列表里的每个元素都是对应行的字典。 - 不建议将Reader直接转为
dict类型,该结构不适合逐行传参的场景。 - 用
DictReader按表头取值的方式兼容性更好,后续如果CSV调整列的顺序,只要表头字段名不变,代码不需要修改。
内容的提问来源于stack exchange,提问作者SIDP
相关产品推荐
相关产品推荐

