我想删除所有以点“。”结尾的单词。在一个文件中。我的文件大约15 MB,将有40万多个字。我正在使用re.findall
查找并替换这些单词。
for w in re.findall(r'([a-zA-Z0-9]+\.)', test_dict):
test_dict = test_dict.replace(w, ' ')
这需要很长时间才能执行。有没有一种方法可以提高性能,或者有其他替代方法来查找和替换此类单词?
答案 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