You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取CSV精确匹配日期执行函数时子串误匹配如何解决

问题说明

现有Python脚本用于读取CSV文件,匹配规则为:当CSV行的Date字段包含当日服务器日期时,读取该行Name字段值。
使用的测试CSV内容如下:

Date,Name
"16,30,7",Sparrow
"1,30",Eagle
"6,13",Penguin

初始实现代码:

user_inp="C:/MasterData/Userinputcsv"
with open(user_inp,'r') as f:
 user_inp=DictReader(f)
 for row in user_inp:
  if str(date.today().day) in row['Date']:
    print(row['Name'])

当日日期为6号时,预期输出为Penguin,实际输出为Sparrow,Penguin,出现误匹配。

错误原因

直接使用in运算符做字符串子串判断时,不会识别逗号分隔的独立值边界:字符串"6"作为子串存在于"16"中,因此存了"16,30,7"的行被误判为匹配。该逻辑无法区分独立日期值和包含相同数字的其他日期(如6和16、26),不符合精确匹配独立值的需求。

解决方案

最稳妥的实现方式是先将Date字段按逗号拆分为独立日期值的集合,再判断当日日期是否存在于集合中,完全规避子串匹配的边界问题。
修正后的可运行代码如下:

import csv
from datetime import date

csv_path = "C:/MasterData/Userinputcsv"
current_day = str(date.today().day)

with open(csv_path, 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        # 按逗号拆分日期值,去除每个值前后的空白字符后转为集合
        date_set = {day.strip() for day in row['Date'].split(',')}
        if current_day in date_set:
            print(row['Name'])

逻辑说明

  • 拆分后"16,30,7"会被处理为集合{'16', '30', '7'},集合中不存在"6",不会触发误匹配
  • 拆分后"6,13"会被处理为集合{'6', '13'},当日为6号时可精准命中
  • 新增的strip()处理可兼容CSV中逗号后带空格的写法(如"6, 13"),鲁棒性更强
  • 该实现无需编写复杂的正则匹配规则,代码可读性和维护成本远高于字符串边界匹配方案

内容的提问来源于stack exchange,提问作者Stay cool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:33:23