用另一行完全替换包含搜索模式的行

时间:2012-03-16 01:04:15

标签: python regex replace

我想用我想要的输出路径替换以某个表达式开头的每一行(例如:<Output>)。我发现并开始使用python脚本,在一个文件中的每次出现时都将一个字符串替换为另一个字符串 - 例如:

text = open( path ).read()
if output_pattern in text:
   open( path, 'w' ).write( text.replace( pattern, replace ) )

但是,我想将text.replace( pattern, replace )替换为用pattern替换包含replace的整行的内容。我尝试了一些事情并且悲惨地失败了。

注意:我可以阅读但不完全写python ...

我的一次失败确实用线替换了模式。实际上,它只用替换模式替换了整个文件,因为它需要很多次...是的,因为我正在进行递归搜索(以前的尝试,用一个字符串替换另一个字符串,工作得很好,不好笑,所以我很勇敢,并将我的目标目录设置为我想要使用的根目录)

还有其他一些很好的例子,它们逐行读取并写入输出文件,然后将输出文件复制到输入文件中,但是我在执行此操作时出错。

我真的不想使用正则表达式,因为我可能想要搜索的模式(尤其是我想要替换的模式)(可能)包含许多特殊字符,包括反斜杠,但如果需要,可以对它们进行转义。 / p>

1 个答案:

答案 0 :(得分:3)

如果行以replace开头,则替换为pattern的行:

text = open(path).read()
new_text = '\n'.join(replace if line.startswith(pattern) else line
                                for line in text.splitlines())
open(path, 'w').write(new_text)

或针对内存使用进行了优化,并使用with语句,这更加惯用:

with open(input_path) as text, open(output_path, 'w') as new_text:
    new_text.write(''.join(replace if line.startswith(pattern) else line
                                for line in text))

您需要确保replace中包含换行符(\n),以便后一个示例按您的预期工作。