Python如何识别CSV分类标题行,分区解析生成Fruit、Vegetable类对象
实现方案
完全可以通过状态标记的方式实现,只需要新增一个变量记录当前所处的分类区间,不需要依赖列数判断,就能彻底避免分类误判的问题,同时还能兼容你提到的蔬菜行带额外标记的场景。
修正后的完整代码如下:
import csv from Fruit import * from Vegetable import * # Fruit & Vegetable are Class def build_object(filename): fruit_list = [] veggie_list = [] # 新增状态变量,记录当前读取的分类,初始为无分类 current_category = None with open(filename, 'r') as infile: reader = csv.reader(infile) for row in reader: # 跳过空行 if not row: continue # 先判断是不是分类标题行 first_cell = row[0].strip().upper() if first_cell == 'FRUIT': current_category = 'FRUIT' continue elif first_cell == 'VEGETABLE': current_category = 'VEGETABLE' continue # 按照当前分类处理行数据 if current_category == 'FRUIT': # 水果行固定取3个属性 f = Fruit(row[0].strip(), row[1].strip(), row[2].strip()) fruit_list.append(f) elif current_category == 'VEGETABLE': # 处理蔬菜行带额外标记的场景 if len(row) == 3: # 第一个元素是标记,这里可以写你需要触发的其他逻辑 tag = row[0].strip() # 后面两个是蔬菜属性 v = Vegetable(row[1].strip(), row[2].strip()) # 示例:如果是no stock标记可以给蔬菜对象加属性或者做其他处理 if tag == 'no stock': v.in_stock = False else: v = Vegetable(row[0].strip(), row[1].strip()) v.in_stock = True veggie_list.append(v) # 修复原代码return在print前的错误 print(fruit_list) print(veggie_list) return fruit_list, veggie_list
关键改动说明
- 补全了原代码缺失的
import csv导入语句 - 新增状态变量跟踪当前分类,完全基于标题行做分类切换,不受行内列数影响
- 修复了原代码缩进错误:原代码中
print语句写在return之后,永远不会被执行 - 适配了蔬菜行带额外标记的场景,你可以根据自己的需求修改标记对应的处理逻辑
内容的提问来源于stack exchange,提问作者Apple Juice
相关产品推荐
相关产品推荐

