查找字符串并替换行

时间:2018-08-08 08:11:19

标签: python-3.x

我已经可以将很多代码放在一起(尽管它不是很长的代码)。但是,我正在努力实现“替换整个行,而不仅仅是搜索词”。有没有可以放置的符号?像:*或%等。

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

3 个答案:

答案 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)