我正在尝试编写一些python代码,用于从文件名中删除邮件地址信息。我的代码来自本网站上的另一个问题。它似乎工作,但我在最后一行得到了关键错误。 作业类的变量是包含作业详细信息的字符串。 目前的早期阶段。
fileName = '73C Example St, Suburbia.txt'
rep = {
job.street :'',
job.suburb :'',
job.town :'',
job.state :'',
job.num :'',
' street' :'',
' road' :'',
' lane' :'',
' place' :'',
' court' :'',
' drive' :'',
' rd,' :'',
' st,' :'',
' pl,' :'',
' cct,' :'',
' ct,' :''
}
rep = dict((re.escape(k), v) for k, v in rep.iteritems())
pattern = re.compile("|".join(rep.keys()), re.IGNORECASE)
fileName = pattern.sub(lambda m: rep[re.escape(m.group(0))], fileName)
错误是:
fileName = pattern.sub(lambda m: rep[re.escape(m.group(0))], fileName)
KeyError: '73c'
我不明白为什么这把钥匙会失败。
根据要求:
self.num = '73C'
self.street = 'Example'
self.suburb ='Suburbia'
self.town = 'Darwin'
self.state = 'NT'
答案 0 :(得分:3)
你的正则表达式不区分大小写,但dict查找不是。看起来"73C"
是rep
中的关键字,这使得正则表达式匹配"73c"
,但rep["73c"]
是KeyError
。
尝试
rep = dict((re.escape(k.lower()), v) for k, v in rep.iteritems())
pattern = re.compile("|".join(rep.keys()), re.IGNORECASE)
fileName = pattern.sub(lambda m: rep[re.escape(m.group(0).lower())], fileName)