Найдите строку, содержащую текст, замените завершенную строку python - PullRequest
2 голосов
/ 18 октября 2011

Итак, я пытаюсь найти определенную строку, которая, например, может быть: 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 ]

4 голосов
/ 18 октября 2011

Без регулярного выражения:

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.

1 голос
/ 18 октября 2011

Вы правы, регулярное выражение - путь.

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)
0 голосов
/ 18 октября 2011

Это, вероятно, то, что вы хотите (соответствие = и цифры после = необязательно).Поскольку вы выполняете поиск и замену в цикле, компиляция регулярного выражения будет более эффективной, чем прямое использование re.sub.

import re

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

for line in process:
    pattern.sub('process.control.timeout=900', line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...