在Python中执行大量搜索/替换的有效方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Python中执行大量搜索/替换的有效方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1501字,纯文字阅读大概需要3分钟。
内容图文
![在Python中执行大量搜索/替换的有效方法?](/upload/InfoBanner/zyjiaocheng/653/290e41cdd7fb4d9f9d627106be68af06.jpg)
我刚接触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","•") # 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中执行大量搜索/替换的有效方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。