2011-10-18 12 views
2

たとえば、次のような特定の文字列を検索しようとしています: process.control.timeout = 30、しかし30は何でもかまいません。私はこれを試しました:テキストが含まれている行を検索し、完全な行のpythonを置き換えます

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

しかし、これは私にprocess.control.timeout = 900 = 30を返します。正規表現をワイルドカードで使用する必要があると感じていますか?しかし、私はPythonにはかなり新しいです。

+0

マジックナンバーを扱う簡単な方法があります:名前で一度定義し、その番号が必要な場所でその名前を使用します。番号を変更することを決定しますか? 1行のコードを変更します。 –

答えて

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) 

あなたが一致しているテキストではなく"process.control.timeout" in lineline.startswith("process.control.timeout")を使用し、行の先頭にある場合。

+0

パーフェクト!最初のものを使用し、素晴らしい仕事をした。ありがとう – Danny

1

あなたは正しいです、正規表現は行く方法です。

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

これは、あなたが(==と数字をマッチングはオプションです)欲しいものと考えられます。ループ内で検索と置換を行っているときに、別々に正規表現をコンパイルする方がre.subを直接使用するより効率的です。正規表現がなければ

import re 

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

for line in process: 
    pattern.sub('process.control.timeout=900', line) 
関連する問題