如何修改Python代码将CSV中l[5]列数字串替换为l[6]列对应值
问题排查与修复方案
原代码存在的问题
- 正则表达式规则不匹配需求:原正则
r'_[\d]{19}'要求下划线后必须跟19位数字,但你的需求是匹配下划线加任意长度数字(比如示例的_58982只有5位),规则完全不匹配导致判断永远不生效 - 缩进错误:Python对缩进敏感,原代码中
if语句没有在try代码块下正确缩进,else代码块的缩进也和对应if不匹配,会直接报语法错误 - 打印语句占位符无传参:两个
print的{}占位符没有传入对应行号参数,运行会输出不完整日志 - 正则匹配范围不准确:没有限制完整匹配,若
l[5]开头是下划线加数字但后面还有其他字符也会被误匹配,不符合需求
修复后代码
import re # 确认代码顶部已导入re库 ret = [] # 增加行号计数,方便日志定位问题 for line_no, l in enumerate(self.lines[1:], start=2): try: # 正则修改为匹配「整个字符串是下划线加任意位数数字」的格式 if re.match(r'^_\d+$', l[5]): print(f"Processing Line No : {line_no}") s = Sample( verified=True, count=l[1], intent=l[6].replace(':','_').replace('-', '_'), token_tree=TokenTree(l[8]), protected=self.protected ) else: s = Sample( verified=True, count=l[1], intent=l[5].replace(':','_').replace('-', '_'), token_tree=TokenTree(l[8]), protected=self.protected ) except Exception as ex: raise ValueError(f"Bad sample definition: {l} (check tabs)") else: print(f"Processing 5 No : {line_no}") ret.append(s)
内容的提问来源于stack exchange,提问作者nikom
相关产品推荐
相关产品推荐

