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

CSV列日期相减计算 筛选信用卡有效期超10年用户导出JSON报错修复

修复后的日期筛选导出Python代码

错误原因说明

  • 直接对日期字符串后两位做减法:既无法处理字符串类型运算问题,也会遇到跨世纪年份计算错误(比如1999年和2002年的后两位相减得到负数)
  • 出现'datetime.datetime' object is not iterable报错:大概率是代码中错误遍历了单个datetime对象,或者把datetime对象当成可迭代对象做了解包操作

可运行完整代码

假设你的CSV中信用卡开卡日期字段名为ccard_issue_date,到期日字段名为ccard_expire_date,日期格式为年-月-日(如2018-03-15),如果字段名或格式不匹配直接替换代码中对应部分即可:

import csv
import json
import datetime

# 存储符合筛选条件的客户数据
to_remove_list = []

# 替换为你的CSV文件路径
with open("customer_data.csv", "r", encoding="utf-8") as csv_f:
    # 如果你已经用csv.reader完成了结构化字典构建,直接复用你的逻辑即可
    reader = csv.DictReader(csv_f)
    for row in reader:
        # 解析日期,格式不匹配的话修改第二个参数的格式串
        try:
            issue_dt = datetime.datetime.strptime(row["ccard_issue_date"], "%Y-%m-%d")
            expire_dt = datetime.datetime.strptime(row["ccard_expire_date"], "%Y-%m-%d")
        # 日期格式非法的行可按业务需求调整处理逻辑
        except ValueError:
            continue
        
        # 判断日期间隔是否超过10年,避开闰年误差
        issue_after_10y = datetime.datetime(
            issue_dt.year + 10,
            issue_dt.month,
            issue_dt.day
        )
        if expire_dt > issue_after_10y:
            # 这里写入你已经构建好的结构化字典即可
            to_remove_list.append(row)

# 导出为目标JSON文件
with open("remove_ccard.json", "w", encoding="utf-8") as json_f:
    json.dump(to_remove_list, json_f, ensure_ascii=False, indent=2)

注意事项

  • 不需要安装第三方库的前提下,不要用(expire_dt - issue_dt).days > 365 * 10的计算方式,会因为闰年导致误差
  • 日期格式串需要和CSV内的实际格式完全匹配:比如格式为月/日/年就替换为%m/%d/%Y,格式为年/月/日就替换为%Y/%m/%d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:01