re.compile(pattern, file) 调用导致系统崩溃
我有一个文件需要解析。这个解析过程是逐步进行的,每次迭代时,表达式会变得更加具体。
导致系统负担过重的代码大致是这样的:
for item in ret:
pat = r'a\sstyle=".+class="VEAPI_Pushpin"\sid="msftve(.+?)".+>%s<'%item[1]
r=re.compile(pat, re.DOTALL)
match = r.findall(f)
这个文件是一个相当大的HTML文件(从必应地图解析而来),每个答案都必须与它的确切ID匹配。
在应用这个变化之前,工作流程非常顺畅。我可以做些什么来避免这个问题吗?或者优化一下代码呢?
1 个回答
0
我猜可能是你找的匹配项太多了,导致内存不够用。虽然这听起来不太合理,但也有可能是这样。你可以试试用finditer这个方法,它会一次找到一个匹配项,而不是一次性把所有匹配项都放到一个巨大的列表里。如果这样还是解决不了你的问题,那你可能遇到了re模块里的一个更严重的bug。