mysql 字符串用省略号_使用正则表达式避免如果省略号

我是Python的新手,我正在用它进行一个难看的将表数据转换成db的小转换.该程序查看数据,在MySQL中创建一个表,然后将数据读入表中.在本节中,将检查标题行文本以对数据类型做出一些决定.我有个主意,我可以很聪明,并使用一个正则表达式而不是if / elifs.我的解决方案至少适用于这种情况,在这里我不必担心多个匹配项.我要问的是,这种方法在效率方面是否有真正的优点?

def _typeMe(self, header_txt):

# data typing

colspecs = {

'id':'SMALLINT(10)',

'date':'DATE',

'comments':'TEXT(4000)',

'flag':'BIT(1)',

'def':'VARCHAR(255)'

}

# regex to match on header text e.g. 'Provisioner ID'

r = re.search(re.compile('(ID$)|(Date)|(Comments$)|(FLAG$)', re.IGNORECASE), header_txt)

checktype = lambda m: max(m.groups()).lower() if m else 'def'

return colspecs[checktype(r)]

解决方法:

我同意@ecatmur的回答;我只想发布一些轻微的代码建议,这些建议太长了,无法发表评论.

无需执行re.search(re.compile(‘…’,re.IGNORECASE),header_text).相反,您可以直接将字符串作为re.search(‘…’,header_text,re.IGNORECASE)传入.如果您一遍又一遍地使用相同的正则表达式,则re.compile会更快,但如果您不使用re.search和朋友,它将为您调用它.

尽管我不同意Colin对命名为lambda的不屑(这很方便,因为它们仍然是一行而不是两行),但您根本不需要在这里使用内部函数:

return colspecs[max(m.groups()).lower() if m else 'def']

如果您只创建一个捕获组而不是四个捕获组,则也不需要max(m.groups())技巧:'(ID | Date | Comments | Flag)$’.然后,您可以执行m.group(1).

标签:python

来源: https://codeday.me/bug/20191201/2077364.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值