首页 > 解决方案 > 修改代码以使用与上传的 CSV 不同的列中的字符替换数字

问题描述

我一直在努力修改下面的逻辑,如果下面提取的列的值:l[5] 是一个数字并且类似于_58982,它将简单地用下一列的值替换它在 CSV 文件中为 l[6],最终输出将变为:LEARNING_MAT。

下面是示例逻辑,但它没有按预期工作。

       for l in self.lines[1:]:
        try:
        if(re.match(r'_[\d]{19}', l[5])):
            print("Processing 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("Bad sample definition: %s (check tabs)" % l)
        else:
            print("Processing 5 No : {}")
            ret.append(s)

标签: pythonregexcsv

解决方案


下面的代码适用于此 -

if(re.match(r'_[\d]{19}', l[5])):
                unaccented_string = unidecode(l[6])
                # surpassing all control characters, symbols and punctuations
                res = "".join(char for char in unaccented_string if category(char)[0] not in ["C", "S", "P"])
                #remove duplicate spaces
                res = " ".join(res.split())
                append_str = "X_"
                if(res[:1].isdigit()):
                    res = append_str+res
                s = Sample(verified=True,
                        count=l[1],
                        intent=str(res).replace(':','_').replace('-', '_').upper().replace(" ","_"),
                        token_tree=TokenTree(l[8]),
                        protected=self.protected)
                ret.append(s)

推荐阅读