我有以下 Python 代码,但它在 10mb 文件上运行有点慢。我想知道有什么办法可以加快速度吗?也许通过一次完成 re.sub (而不是两次操作) - 但不确定如何做到这一点,或者也许还有另一种方法?
def ChangeMode(file, amode0, amode1, bmode0, bmode1):
for line in iter(file):
if 'AAA' in line or 'BBB' in line or 'CCC' in line:
line = re.sub(mode0, mode1, line)
line = re.sub(bmode0, bmode1, line)
endstring += line
return endstring
Cheers
如果受影响的线路很少,您可以使用以下方法加快速度re.sub
or re.finditer
直接查找这些行,而不是在 Python 级别迭代这些行。和str.replace
在简单的字符串替换的情况下速度很快:
def fsub(m):
return m.group().replace('ij', 'xx').replace('kl', 'yy')
s = re.sub('(?m)^.*(?:AAA|BBB|CCC).*', fsub, open(path).read())
Note: (?m)
导致^
匹配每行的开头并且.*
不要抓住超出线端的地方。
REGEX 预编译可以稍微加快许多单独的 REGEX re.sub 的速度(当简单的字符串替换不适用时):
rec = re.compile(r'ij\d+') # once
...
line = rec.sub('xx', line) # often
(re.sub
不过已经使用了 REGEX 编译缓存,速度相当快。)
如果替换不会改变字符串大小,您可以通过使用来加快速度bytearray
/ 缓冲区甚至mmap
并就地修改数据。 (re.sub()
and string.replace
and endstring += line
因为大量内存被复制。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)