可能有几种解决此问题的方法,因此我对任何想法都开放。
我有一个文件,该文件中的是字符串" D133330593"注:我确实在该字符串中存在的文件中具有确切的位置,但是我不知道是否有帮助。
按照此字符串,有6位数字,我需要用其他6个数字替换这6位数字。
这是我到目前为止所拥有的:
def editfile():
f = open(filein,'r')
filedata = f.read()
f.close()
#This is the line that needs help
newdata = filedata.replace( -TOREPLACE- ,-REPLACER-)
#Basically what I need is something that lets me say "D133330593******"
#->"D133330593123456" Note: The following 6 digits don't need to be
#anything specific, just different from the original 6
f = open(filein,'w')
f.write(newdata)
f.close()
使用re
模块定义您的模式,然后使用sub()
函数用自己的字符串代替该模式。
import re
...
pat = re.compile(r"D133330593d{6}")
re.sub(pat, "D133330593abcdef", filedata)
上面的模式定义为 - 您的字符串(" D13330593"),然后是六个小数位数。然后,下一行替换了替换字符串(在这种情况下为" abcdef"),如果您想要的话。
如果您想要每次出现模式的唯一替换字符串,则可以在sub()
函数中使用count
关键字参数,该函数允许您指定必须完成替换的次数。
查看此库以获取更多信息-https://docs.python.org/3.6/library/re.html
让我们简化您的问题,让您拥有string
:
s = "zshisjD133330593090909fdjgsl"
您想用"123456"
替换"D133330593"
之后的6
字符以生产:
"zshisjD133330594123456fdjgsl"
为了实现这一目标,我们首先需要找到"D133330593"
的index
。这是通过仅使用str.index
:
i = s.index("D133330593")
然后替换下一个6
characters
,但为此,我们应该首先计算要替换的string
的长度:
l = len("D133330593")
然后进行替换:
s[:i+l] + "123456" + s[i+l+6:]
为我们提供了以下理想的结果:
'zshisjD133330593123456fdjgsl'
我确定您现在可以将其集成到代码中以使用文件,但这就是您可以做问题的核心。
请注意,在上面使用上述变量是正确的事情,因为它比在旅途中计算它们是最有效的。但是,如果您的file
不太长(即效率不是太多),则可以在一行中完成上面概述的整个过程:
s[:s.index("D133330593")+len("D133330593")] + "123456" + s[s.index("D133330593")+len("D133330593")+6:]
给出相同结果。