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

使用FOR语句提取CSV中变量值左侧数据的技术问询

解决双重嵌套循环仅捕获单条匹配记录的问题

看起来你遇到的问题是用双重嵌套循环匹配银行对账单CSV和checking表格时,只拿到了第一条匹配的记录,而不是所有符合条件的条目对吧?我来帮你拆解下可能的原因,再给出具体的修正方案。

常见问题原因

你当前的代码大概率犯了这两个错误之一:

  1. 用单个变量存储匹配结果,每次新匹配都会覆盖之前的值,最终只保留最后(或第一个)匹配的记录
  2. 内层循环找到第一个匹配后就直接break退出,没有继续遍历剩下的记录

修正后的代码示例

第一步:正确解析CSV数据

首先得确保你把原始CSV的Description= Citgo A= 1.53这类格式正确解析成可操作的数据结构,比如字典列表:

import re

# 模拟你的原始CSV行数据
raw_csv_lines = [
    "Description= Citgo A= 1.53",
    "Description = MCD A = 2.42"
]

# 解析CSV行,处理字段间的空格问题
csv_records = []
for line in raw_csv_lines:
    # 用正则匹配描述和金额,兼容字段前后的空格
    match_result = re.match(r"Description\s*=\s*(.*?)\s*A\s*=\s*(\d+\.\d+)", line)
    if match_result:
        desc = match_result.group(1)
        amount = float(match_result.group(2))
        csv_records.append({"Description": desc, "A": amount})

第二步:用双重循环匹配并保存所有结果

这里改用列表存储所有匹配记录,避免变量被覆盖,同时合理控制循环的退出逻辑:

# 模拟你的checking表格金额数据
checking_amounts = [1.53, 2.42]

# 用列表保存所有匹配的记录
matched_results = []

# 双重嵌套循环匹配
for csv_row in csv_records:
    current_desc = csv_row["Description"]
    current_amount = csv_row["A"]
    for check_amount in checking_amounts:
        if current_amount == check_amount:
            # 将匹配的描述和金额添加到结果列表
            matched_results.append({
                "Description": current_desc,
                "A": current_amount
            })
            # 可选:如果checking表格里的金额唯一,这里可以break提升效率
            # break

# 输出所有匹配结果
for result in matched_results:
    print(f"a= {result['A']} Description= {result['Description']}")

关键注意点

  • 用容器存储结果:永远用列表、数组这类容器来收集多条匹配记录,别用单个变量赋值
  • 谨慎使用break:如果checking表格里存在重复金额,不要在找到第一个匹配就break,否则会遗漏后续匹配项
  • 解析时处理空格:原始CSV里的Description =和A =带空格,一定要用正则或者split处理好,避免解析失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:17:27