为了账号安全,请及时绑定邮箱和手机立即绑定

尝试,除外 / If 语句组合 - 缺少结果

尝试,除外 / If 语句组合 - 缺少结果

慕沐林林 2021-10-26 10:40:21
我将一个大学列表与其他 12 个列表进行比较,查找模糊字符串匹配并将所有结果写入csv。我没有对一个大列表进行模糊字符串匹配,因为我需要知道匹配来自哪个列表。列表示例:data = [[1-00000, "MIT"], [1-00001, "Stanford"] ,...]Data1 = ['MASSACHUSETTS INSTITUTE OF TECHNOLOGY (MIT)'], ['STANFORD UNIVERSITY'],...在 StackOverflow 的帮助下,我得到了:for uni in data:    hit = process.extractOne(str(uni[1]), data10, scorer = fuzz.token_set_ratio, score_cutoff = 90)    try:        if float(hit[1]) >= 94:            with open(filename, mode='a', newline="") as csv_file:                fieldnames = ['bwbnr', 'uni_name', 'match', 'points']                writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=';')                writer.writerow({'bwbnr': str(uni[0]), 'uni_name': str(uni[1]), 'match': str(hit), 'points': 10})    except:        hit1 = process.extractOne(str(uni[1]), data11, scorer = fuzz.token_set_ratio, score_cutoff = 90)        try:            if float(hit1[1]) >= 94:                with open(filename, mode='a', newline="") as csv_file:                      fieldnames = ['bwbnr', 'uni_name', 'match', 'points']                      writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=';')                      writer.writerow({'bwbnr': str(uni[0]), 'uni_name': str(uni[1]), 'match': str(hit), 'points': 5})沿着 12 个列表向下直到最后一个例外,其中我包括那些分数低于 94 并以“未找到”结尾的列表:    except:        hit12 = process.extractOne(str(uni[1]), data9, scorer = fuzz.token_set_ratio)        try:            if float(hit12[1]) < 94:                with open(filename, mode='a', newline="") as csv_file:                       fieldnames = ['bwbnr', 'uni_name', 'match', 'points']                       writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=';')                       writer.writerow({'bwbnr': str(uni[0]), 'uni_name': str(uni[1]), 'match': str(hit), 'points': 3})但是,我只返回了 2854 个结果,而不是原始列表中的 3175 个(所有这些都需要检查并写入新的 csv)。我在这里缺少什么?我感觉process.extractOne由于某种原因正在丢弃返回“无”的结果。任何帮助将非常感激。完整代码可以在这里找到。
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

最后的 try-except 应该是检查所有列表并在没有 score_cutoff 的情况下执行 extractBest:


except:

    hit12 = process.extractOne(str(uni[1]), big_list, scorer = fuzz.token_set_ratio)

    with open(filename, mode='a', newline="") as csv_file:

           fieldnames = ['bwbnr', 'uni_name', 'match', 'confidence', 'points']

           writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=';')

           writer.writerow({'bwbnr': str(uni[0]), 'uni_name': str(uni[1]), 'match': "CHECK AGAIN " + str(hit12[0]), 'confidence': str(hit12[1]), 'points': 3})



查看完整回答
反对 回复 2021-10-26
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号