Python实现read_input读取CSV返回嵌套子列表的总列表问题求解
原代码问题梳理
- 没有封装为需求要求的
read_input(fileName)函数,硬编码了文件名,且全局作用域下写return会直接报错 - 直接用
x = i属于引用传递,修改x会改动csv reader返回的原始行数据,后续插入逻辑的位置也完全不符合字段映射要求 - 没有按规则为每个个体单独构建长度为7的新子列表,导致最终返回的列表元素格式错误
修复后的完整代码
import csv def read_input(fileName): finches = [] # 用with上下文自动管理文件关闭,无需手动调用close with open(fileName, 'r', encoding='utf-8') as f: data_reader = csv.reader(f) # 如果你的csv有表头,取消下面一行的注释跳过表头 # next(data_reader) a_row = None for row in data_reader: if row[2] == 'A': # 暂存当前个体的等位基因A行数据 a_row = row else: # 遇到等位基因B行时,严格按映射规则构建7元素个体子列表 individual = [ a_row[0], # species a_row[1], # Individual ID a_row[3], # alleleA gene row[3], # alleleB gene a_row[4], # alleleA beak shape score row[4], # alleleB beak shape score a_row[5] # beak type ] finches.append(individual) return finches # 调用示例 # finches = read_input("finches.csv") # print(finches)
代码说明
- 用
a_row变量暂存每个个体的等位基因A行数据,遇到对应的B行时直接按索引取值构建新列表,避免了引用修改原数据和插入位置错误的问题 - 完全匹配需求的字段映射规则,每个子列表固定为7个元素,最终返回的
finches就是元素为个体子列表的总列表 - 用with上下文管理文件操作,避免异常场景下文件未关闭的问题
内容的提问来源于stack exchange,提问作者fahim
相关产品推荐
相关产品推荐

