gpt4 book ai didi

python - 在 Python 中进行大量搜索/替换的有效方法?

转载 作者:行者123 更新时间:2023-11-28 16:53:07 26 4
gpt4 key购买 nike

我是 Python 的新手,正在编写一系列脚本以在某些专有标记格式之间进行转换。我逐行遍历文件,然后基本上进行大量 (100-200) 替换,这些替换基本上分为 4 类:

line = line.replace("-","<EMDASH>")  # Replace single character with tag
line = line.replace("<\\@>","@") # tag with single character
line = line.replace("<\\n>","") # remove tag
line = line.replace("\xe1","&bull;") # replace non-ascii character with entity

str.replace() 函数似乎非常有效(当我检查分析输出时,数字相当低),但是有没有更好的方法来做到这一点?我见过以函数作为参数的 re.sub() 方法,但我不确定这是否会更好?我想这取决于 Python 内部做了什么样的优化。我想我会在创建一个可能不是很有帮助的大字典之前征求一些建议!

此外,我还对标签进行了一些解析(看起来有点像 HTML,但不是 HTML)。我识别这样的标签:

m = re.findall('(<[^>]+>)',line)

然后在匹配的标签中进行约 100 次搜索/替换(主要是删除匹配项),例如:

m = re.findall('(<[^>]+>)',line)
for tag in m:
tag_new = re.sub("\*t\([^\)]*\)","",tag)
tag_new = re.sub("\*p\([^\)]*\)","",tag_new)

# do many more searches...

if tag != tag_new:
line = line.replace(tag,tag_new,1) # potentially problematic

这里有关于效率的想法吗?

谢谢!

最佳答案

如果您要进行基本搜索和替换,

str.replace() 效率更高,如果您需要,re.sub(显然)效率更高复杂的模式匹配(否则你将不得不多次使用 str.replace)。

我建议您结合使用两者。如果您有多个模式都被一个东西替换,请使用 re.sub。如果您只是在某些情况下需要将一个特定标记替换为另一个标记,请使用 str.replace

您还可以通过使用更大的字符串来提高效率(调用 re.sub 一次,而不是每行调用一次)。增加内存使用量,但除非文件很大,否则应该不是问题,但也会缩短执行时间。

关于python - 在 Python 中进行大量搜索/替换的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4661041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com