我已经可以将很多代码放在一起(尽管它不是很长的代码)。但是,我正在努力实现“替换整个行,而不仅仅是搜索词”。有没有可以放置的符号?像:*或%等。
import glob
for files in glob.glob("./prtr/*p*"):
with open(files, 'r') as file:
filedata = file.read()
filedata = filedata.replace('TCPOPTS', 'TCPOPTS = 80\n')
with open(files, 'w') as file:
file.write(filedata)
到目前为止,将“ TCPOPTS”替换为“ TCPOPTS = 80”并完成了换行符。但是,它不会删除该行的其余部分,而只是将其移至下一行。由于代码,这当然是正确的。因此,如前所述,我现在所要做的就是不要让它代替搜索词,而是替换包含该搜索词的整行。
任何建议都非常赞赏:)
亲切的问候
编辑:
之前:
TCPOPTS = 90
之后:
TCPOPTS = 80
= 90
预期:
TCPOPTS = 80
答案 0 :(得分:1)
我最近通过以下方式解决了一项非常相似的任务:
# Scan file
with open(filePath, 'r') as file:
fileContent = file.readlines()
# Find line, where modification should be done
for lineIndex in range(len(fileContent)):
if ('TCPOPTS' in fileContent[lineIndex]):
fileContent[lineIndex] = 'TCPOPTS = 80\n'
with open(filePath, 'w') as tableFile:
tableFile.writelines(fileContent)
break
这样做的好处是,如果找不到您的关键字,则不会重写文件。
答案 1 :(得分:0)
尝试使用str.startswith
例如:
import glob
for files in glob.glob("./prtr/*p*"):
res = []
with open(files) as infile:
for line in infile: #Iterate Each line
if line.startswith("TCPOPTS"): #Check if TCPOPTS in line
res.append("TCPOPTS = 80\n")
else:
res.append(line)
with open(files, "w") as outfile: #Write back to file.
for line in res:
outfile.write(line)
答案 2 :(得分:0)
您可以使用re.sub
(在导入re
之后)来匹配整行,并使用向后引用保留匹配的选择性部分:
更改:
filedata = filedata.replace('TCPOPTS', 'TCPOPTS = 80\n')
收件人:
filedata = re.sub(r'^(?P<header>TCPOPTS\s*=\s*).*', r'\g<header>80', filedata, flags=re.MULTILINE)