我有一个由CSV阅读器创建的字典,其中列A具有原始名称,列B具有更新的名称。
dict[key] = {value}
我从数据库中选择一个值,目标是使用键搜索该字符串并将其替换为值。
最终将通过UPDATE语句更新。但是,如果字符串不包含任何'键'的任何实例,则检查完成非常重要。并且具有价值'然后它从更新中跳过并且没有传递给dict。
搜索字符串的最佳方法是什么?因为它正在进行重复替换。我想"匹配案例"整个字符串。
name = 'de testing nl testing es testing_updated en testing_updated it testing fr testing_updated'
dict["testing"] = {"testing_updated"}
for key,value in dict.items():
if str(key) not in name and list(value)[0] in name:
print("{} has already been replaced with {}".format(key,value))
else:
name = name.replace(str(key),list(value)[0])
print(name)
输出:
de testing_updated nl testing_updated es testing_updated_updated en testing_updated_updated it testing_updated fr testing_updated_updated
如果检查通过并且名称正确更新(它不是),最终将它传递给新字典,然后使用字典编译sql update语句。
答案 0 :(得分:0)
如果将"testing"
替换为"testing_updated"
,则生成的字符串仍然包含字符串"testing"
,因此您的检查无法识别它已更新。
您可以使用"testing "
和"testing_updated "
之类的内容,而不是使用尾随空格或制表符,但根据您的实际数据,这可能不适用于所有情况。
如果我理解正确,您有一个包含更新和未更新元素的字符串。在这种情况下,您应该首先使用str.split
将字符串拆分为包含元素,然后单独处理元素。
答案 1 :(得分:0)
陈述,您有CSV格式的替换说明:
1 A B
2 B C
....
如果您有一个字符串“AB”并按顺序应用搜索/替换,您的字符串最终为“CC”,而不是“BC”。
您有两种解决方法:
1 A DISTINGUISH_A
2 B DISTINGUISH_B
....
....
11 DISTINGUISH_A B
12 DISTINGUISH_B C
方式2很有趣,因为主循环不会改变:搜索和替换的顺序。并且,准备修改的指令也可以自动化。