可能有几种方法可以解决这个问题,因此我可以接受任何想法。
我有一个文件,在该文件中是字符串" 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()
答案 0 :(得分:3)
使用re
模块定义您的模式,然后使用sub()
函数用您自己的字符串替换该模式的出现。
import re
...
pat = re.compile(r"D133330593\d{6}")
re.sub(pat, "D133330593abcdef", filedata)
以上将模式定义为 - 您的字符串(" D133330593")后跟六位十进制数字。然后下一行用替换字符串替换所有出现的模式(" abcdef"在这种情况下),如果这是你想要的。
如果您希望每次出现模式都有唯一的替换字符串,那么您可以在count
函数中使用sub()
关键字参数,该参数允许您指定替换必须的次数完成。
查看此库以获取更多信息 - https://docs.python.org/3.6/library/re.html
答案 1 :(得分:2)
让我们为string
:
s = "zshisjD133330593090909fdjgsl"
并且您希望将6
之后的"D133330593"
字符替换为"123456"
来生成:
"zshisjD133330594123456fdjgsl"
为实现这一目标,我们首先需要找到index
的{{1}}。这只需使用"D133330593"
:
str.index
然后替换下一个i = s.index("D133330593")
6
,但为此,我们应首先计算我们要替换的characters
的长度:
string
然后进行替换:
l = len("D133330593")
给了我们想要的结果:
s[:i+l] + "123456" + s[i+l+6:]
我相信您现在可以将其集成到您的代码中以处理文件,但这就是您解决问题的方法。
请注意,使用上述变量是正确的做法,因为与在旅途中计算它们相比,它是最有效的。然而,如果你的'zshisjD133330593123456fdjgsl'
时间太长(即效率不是太大的话),你可以在一行中完成上述整个过程:
file
给出相同的结果。