我有很多这样的台词:
13480 AAA BBB CCC
我想用python将它们转换成类似于:
^{pr2}$知道“AAA BBB CCC
”是一个城镇,所以它可以是“AAA BBB CCC
”、“AAA BBB
”、“AAA-BBB-CCC
”、“AAA
”、“L'AAA
”、“D'AAA BBB
”、“D'AAA..
”。好吧,电话号码后面的最后一个是镇名。在
所以一个大文件包含以下行:
06260 Puget Théniers
06620 Bar sur Loup (Le)
06640 SAINT JEANNET
06640 Saint Jeannet
06660 AURON
06660 SAINT ETIENNE DE TINEE
06660 Saint Etienne de Tinée
06670 Levens
06710 Touët sur Var
06750 ANDON
06750 Thorenc
最终会像
SOUNDEX("Puget Théniers") AND CP="06260"
SOUNDEX("Bar sur Loup (Le)") AND CP="06620"
SOUNDEX("SAINT JEANNET") AND CP="06640"
SOUNDEX("Saint Jeannet") AND CP="06640"
SOUNDEX("AURON") AND CP="06660"
SOUNDEX("SAINT ETIENNE DE TINEE") AND CP="06660"
SOUNDEX("Saint Etienne de Tinée") AND CP="06660"
SOUNDEX("Levens") AND CP="06670"
SOUNDEX("Touët sur Var") AND CP="06710"
SOUNDEX("ANDON") AND CP="06750"
SOUNDEX("Thorenc") AND CP="06750"
开始时最好/最干净的方法是什么?在
我知道我可以在bashshell中使用正则表达式来实现这一点,但我已经用python做了一个大型解析器,可以输出这样的行。所以我想用Python完成所有这些,这就是为什么我要寻找一个干净的代码和一些解释,因为我将来可能会有很多这样的“过滤器”要做。在
[update]13480
应该始终是数字,如果不是,则应该引发异常。在
试试这个(更复杂):
超级简单的解决方案:
^{pr2}$现在您必须使用组(1)和组(2)的结果或结果[0]和结果[1]来创建SQL查询。但我建议您使用参数化查询,而不是简单的字符串操作(以避免SQL注入)。在
这一行程序就可以了,您还可以使用一些regular expression。在
但这绝对不是你想用的。正如Martijn所评论的那样,您不应该手动构建SQL表达式。在SQL基MySQLdb或通用sqlalchemy周围使用一个包装器(最终将使用后者)
使用
^{pr2}$sqlalchemy
你会得到这样的结果:(所有这些都是在你写好剧本的前提下进行的。如果您编写了一个一次性代码来处理数据库,那么可以使用
split
、RegEx甚至VIM脚本)您可以简单地在第一个空格上拆分这些行:
现在您可以进一步处理这些信息。如果您想使用它来查询数据库,我会生成SQL查询文本。而是使用SQL参数:
^{pr2}$这有几个优点:
相关问题 更多 >
编程相关推荐