使用FOR语句提取CSV中变量值左侧数据的技术问询
解决双重嵌套循环仅捕获单条匹配记录的问题
看起来你遇到的问题是用双重嵌套循环匹配银行对账单CSV和checking表格时,只拿到了第一条匹配的记录,而不是所有符合条件的条目对吧?我来帮你拆解下可能的原因,再给出具体的修正方案。
常见问题原因
你当前的代码大概率犯了这两个错误之一:
- 用单个变量存储匹配结果,每次新匹配都会覆盖之前的值,最终只保留最后(或第一个)匹配的记录
- 内层循环找到第一个匹配后就直接
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
相关产品推荐
相关产品推荐

