Python读取CSV已知列名时如何拆分单元格值并按日期筛选行
问题排查
你现有代码存在3个核心问题导致结果不符合预期:
- 语法错误:
Date_val=Date_val..append(row['Date'])多写了一个点,且列表append()方法是原地操作、返回值为None,将其返回值重新赋值给列表会导致变量异常。 - 读取配置错误:使用
DictReader时未导入csv模块,也没有配置quotechar参数适配你CSV中用单引号包裹字段的格式,解析器无法正确识别字段边界,也不会自动处理单元格内的逗号分隔多值。 - 逻辑缺失:没有编写日期匹配判断逻辑,也没有对Date列的多值做拆分比对,自然无法筛选出符合要求的行数据。
实现代码
直接替换成如下代码即可,注意把文件路径改成你实际的存储路径:
import csv from datetime import datetime # 替换为你的CSV文件实际路径 FILE_PATH = "your_file.csv" # 取当日日期的「日」字段,和CSV内存储的日期格式对齐 target_date = str(datetime.today().day) category_res = [] ability_res = [] with open(FILE_PATH, "r", newline="", encoding="utf-8") as f: # 配置单引号为字段包裹符,正确解析含内部逗号的单元格 reader = csv.DictReader(f, quotechar="'") for row in reader: # 拆分当前行Date列的多日期值,去除前后空白 date_items = [item.strip() for item in row["Date"].split(",")] if target_date in date_items: category_res.append(row["Category"].strip()) # 如果需要Ability保留整串值,直接append即可;如果要拆成单个值扁平化存储,替换为下一行的extend逻辑 ability_res.append(row["Ability"].strip()) # ability_res.extend([a.strip() for a in row["Ability"].split(",")]) print("Category_Exp:", category_res) print("Ability:", ability_res)
效果验证
用你提供的测试CSV,将target_date设为'21'时:
- 采用append逻辑收集Ability,输出为
['Air,land', 'water,land'] - 采用extend逻辑拆分收集Ability,输出为
['Air','land','water','land'] - Category输出固定为
['Sparrow', 'Penguin'],完全符合你的预期。
内容的提问来源于stack exchange,提问作者Prasanna Balaji
相关产品推荐
相关产品推荐

