搜索包含某些文本的行,替换整行 python

2 投票
3 回答
3127 浏览
提问于 2025-04-17 04:34

我想找一个特定的字符串,比如说:process.control.timeout=30,但这个30可以是任何数字。我试过这个:

for line in process:
    line = line.replace("process.control.timeout", "process.control.timeout=900")
    outFile.write(line)

但是这样会返回process.control.timeout=900=30。我感觉我可能需要用到正则表达式和通配符?不过我对Python还不太熟悉。

3 个回答

0

这可能就是你想要的(匹配==后面的数字是可选的)。因为你是在一个循环中进行查找和替换,所以单独编译正则表达式会比直接使用re.sub更有效率。

import re

pattern = re.compile(r'process\.control\.timeout(=\d+)?')

for line in process:
    pattern.sub('process.control.timeout=900', line)
1

你说得对,正则表达式(regex)是解决这个问题的好方法。

import re
pattern = re.compile(r"process\.control\.timeout=\d+")
for line in process:
    line = pattern.sub("process.control.timeout=900", line)
    outFile.write(line)
4

不使用正则表达式:

for line in process:
    if "process.control.timeout" in line:
        # You need to include a newline if you're replacing the whole line
        line = "process.control.timeout=900\n" 
    outFile.write(line)

或者

outFile.writelines("process.control.timeout=900\n" 
                      if "process.control.timeout" in line else line 
                         for line in process)

如果你要匹配的文本在行的开头,可以用 line.startswith("process.control.timeout") 来代替 "process.control.timeout" in line

撰写回答