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

Python匹配CSV与文本内容时if语句多次触发如何解决

错误原因
  • 你使用的是子串匹配规则in,短字符串nine是ninety、ninety-nine的子串,ninety是ninety-nine的子串,三者都能匹配到样例文本中的ninety-nine,所以会触发三次if判断写入结果。
  • 之前尝试的break只能跳出内层遍历文本行的循环,外层遍历CSV行的逻辑仍在执行,后续短的匹配项依然会触发写入;倒序读取CSV仅调整了写入顺序,无法阻止短匹配项的写入逻辑,因此无效。
修复方案

核心逻辑调整为:先收集每一行文本的所有匹配项,仅将最长的匹配项写入文件,避免短匹配被误写
修复后的参考代码:

import csv

with open(csvfile_sample) as csvfile, open(sample_file,'r') as sample, open(new_file,'w') as new:
    reader = csv.DictReader(csvfile)
    # 先把所有待匹配的关键词存到列表里
    keywords = [row['replace'] for row in reader]
    # 遍历每一行文本
    for line in sample.readlines():
        # 收集当前行的所有匹配关键词
        matched = [kw for kw in keywords if kw in line]
        if matched:
            # 取最长的匹配项写入
            longest_match = max(matched, key=lambda x: len(x))
            new.write(longest_match)

如果需要按完整单词匹配避免子串误判(比如文本里出现ninetynine不带横杠也不会误匹配),可以用正则的单词边界匹配,修改匹配逻辑即可:

import re
# 匹配部分改成
matched = [kw for kw in keywords if re.search(rf'\b{re.escape(kw)}\b', line)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:15:02