如何向字符串插入唯一数据行,避免子串匹配导致的重复判断错误
问题核心原因
当前代码的判断逻辑存在缺陷:in运算符在大字符串中匹配时会触发子串匹配规则,只要待插入行的内容是任意已有行的子字符串,就会被误判为已存在。比如你遇到的4.0 -99 13.07 -99是44.0 -99 13.07 -99的子串,就会触发误判。
修复方案
将现有存储的字符串按换行符拆分为独立行的列表,再判断待插入行是否完全匹配列表中的某一项,即可避免子串误匹配问题,完全符合你要求的唯一行才能插入的需求。
修改后代码如下:
def appendDataRow(self): # 仅生成一次待插入行,避免重复计算 row = "{0}\t{1}\t{2}\t{3}\n".format(str(self.getAoC1()),str(self.getAoC2()),str(self.getAvgH1()),str(self.getAvgH2())) # 把现有内容按行拆分,逐行精确匹配 existed_rows = self.asStringToCopyFromStatment().splitlines() # 待插入行去掉末尾换行符后匹配,避免换行符差异导致的匹配失败 if row.rstrip('\n') not in existed_rows: self.inputStringToCopyFromStatement += row
补充说明
- 拆分使用
splitlines()方法,可以兼容Windows、Linux等不同系统的换行符格式,不会出现换行符匹配异常 - 仅生成一次
row变量,既减少了重复格式化的性能开销,也避免了两次调用get方法时返回值不一致导致的逻辑错误 - 如果你确认所有行的内容前后不会有无效空格,也可以在匹配时给每行加
.strip()处理,避免空格数量差异导致的匹配失败
内容的提问来源于stack exchange,提问作者Amrmsmb
相关产品推荐
相关产品推荐

