python regex re.findall执行时间太长

时间:2018-06-28 14:31:34

标签: python regex

我想删除所有以点“。”结尾的单词。在一个文件中。我的文件大约15 MB,将有40万多个字。我正在使用re.findall查找并替换这些单词。

for w in re.findall(r'([a-zA-Z0-9]+\.)', test_dict):
    test_dict = test_dict.replace(w, ' ')

这需要很长时间才能执行。有没有一种方法可以提高性能,或者有其他替代方法来查找和替换此类单词?

2 个答案:

答案 0 :(得分:3)

您可以尝试使用re.sub而不是遍历re.findall的结果。

# Example text:
text = 'this is. a text with periods.'

re.sub(r'([a-zA-Z0-9]+\.)', ' ', text)

这将返回与循环相同的结果:

'this   a text with  '

在相对较小的文档(179KB,Romeo和Juliet)上,re.findall循环大约需要0.369秒,而re.sub大约需要0.0091秒。

答案 1 :(得分:0)

在Python中,您可以逐行循环浏览文件,也可以逐字逐行循环浏览文件。

所以您可以考虑:

with open(your_file) as f_in, open(new_file, 'w') as f_out:
    for line in f_in:
         f_out.write(' '.join(w for w in line.split() if not w.endswith('.')+'\n')
# then decide if you want to overwrite your_file with new_file