Skip to main content
 首页 » 编程设计

Python之多次插入大文本

2025年05月04日16cmt

在 Python 中,将两大文本集 A 和 B 插入到另一大文本集 C 中的最快方法(即单遍方法)是什么。

例如 C 是:

.... .... 
<<<A goes here>>> 
.... .... 
<<<B goes here>>> 
.... .... 

和“....”代表相当多的文本(即最多 20k)。

在适当的占位符处插入 A 和 B 的最佳方法是什么,其中 A 和 B 也不是“少量”文本(即最多 2k)。

我的第一个想法是:

C.replace("<<<A goes here>>>", A) 
C.replace("<<<B goes here>>>", B) 

但是因为它已经通过了两次,所以我希望有一个单次通过的解决方案。我考虑过正则表达式,但这似乎有点过分了。 string.Template 是一个选项,但语法不合适(即 $A 是一个可能与其他文本发生冲突的占位符,而 '$' 不会适合逃到别处)。

虽然 A 和 B 占位符在 C 中只出现一次,但我希望有一个解决方案可以扩展到更多的替换——即独立于替换的数量; O(n) 其中 n 是 len(C)。

感谢您的想法和建议。

谢谢。

布莱恩

请您参考如下方法:

str.find 的文档说它返回第一次出现的搜索字符串的索引,这(对我来说)意味着它不会遍历整个字符串。如果你知道"<<<A goes here>>>"总是先出现,我会这样做:

Aflag = "<<<A goes here>>>" 
Bflag = "<<<B goes here>>>" 
Aidx = C.find(Aflag) 
Bidx = C.find(Bflag, Aidx+len(Aflag)+1) 
 
newC = "".join((C[:Aidx], A, C[Aidx+len(Aflag)+1:Bidx], B, C[Bidx+len(Bflag)+1:])) 

如果我的假设是正确的,这将最大限度地减少对字符串的搜索。