【发布时间】:2017-05-02 18:07:07
【问题描述】:
问题:
替换大型文本文件中的多个字符串模式需要很长时间。 (Python)
场景:
我有一个没有特定结构的大文本文件。但是,它包含几种模式。例如,电子邮件地址和电话号码。
文本文件有 100 多种不同的此类模式,文件大小为 10mb(大小可能会增加)。文本文件可能包含也可能不包含所有 100 种模式。
目前,我正在使用re.sub() 替换匹配项,执行替换的方法如下所示。
readfile = gzip.open(path, 'r') # read the zipped file
lines = readfile.readlines() # load the lines
for line in lines:
if len(line.strip()) != 0: # strip the empty lines
linestr += line
for pattern in patterns: # patterns contains all regex and respective replaces
regex = pattern[0]
replace = pattern[1]
compiled_regex = compile_regex(regex)
linestr = re.sub(compiled_regex, replace, linestr)
这种方法需要大量时间来处理大文件。有没有更好的优化方法?
我正在考虑将+= 替换为.join(),但不确定会有多大帮助。
【问题讨论】:
-
你有正则表达式模式或简单的字符串吗?
-
如果你有这么大的文件,你也可以用主键对数据进行一次排序,然后简单地进行二进制搜索,这将大大提高性能。这是一次性的权衡,对我来说似乎是一个快速的胜利。此外,在这种规模下,应该考虑使用数据库。如果您正在处理大量数据,则对其应用结构几乎总是会产生很大的改进。因此,大学经常将数据结构作为一门课程教授。
-
@Krazor:问题作者说文件没有结构。所以我想知道你是如何考虑排序的?
-
那么对不起。正如@salah 所述,您绝对应该考虑使用生成器!
标签: python regex algorithm optimization time-complexity