Python 将包含搜索模式的行完全替换为另一行

Python 将包含搜索模式的行完全替换为另一行,python,regex,replace,Python,Regex,Replace,我想用我想要的输出路径替换以某个表达式(例如:)开头的每一行。我已经找到并开始使用一个python脚本,该脚本在文件中的每个事件中都用一个字符串替换另一个字符串—类似于: text = open( path ).read() if output_pattern in text: open( path, 'w' ).write( text.replace( pattern, replace ) ) 但是,我想替换文本。替换(pattern,replace)为将包含pattern的整行内容替

我想用我想要的输出路径替换以某个表达式(例如:
)开头的每一行。我已经找到并开始使用一个python脚本,该脚本在文件中的每个事件中都用一个字符串替换另一个字符串—类似于:

text = open( path ).read()
if output_pattern in text:
   open( path, 'w' ).write( text.replace( pattern, replace ) )
但是,我想替换
文本。替换(pattern,replace)
为将包含
pattern
的整行内容替换为
replace
。我尝试过一些事情,但失败得很惨

注意:我能读但不能写python

我的一次失败确实用线条代替了图案。实际上,它只使用替换模式替换了整个文件,所需的次数是多少。。。是的,这并不好笑,因为我在做递归搜索(而之前的尝试,用一个字符串替换另一个字符串,效果很好,所以我很勇敢,将我的目标目录设置为我想要使用的根目录)

还有其他一些很好的例子,逐行读取并写入输出文件,然后将输出文件复制到输入文件,但我在这样做时出错


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

要将行替换为
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
),以便后一个示例按预期工作。

要将以
模式开头的行替换为
replace

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
),以便后一个示例按预期工作。

您应该使用两个文本文件执行此操作:一个为读取,另一个为写入。最好使用
with
while True
readline()
设置它。您可以创建一个只包含前十行的测试文件,让它工作,然后在实际目标上运行它。作为一个起点,你应该使用两个文本文件:一个作为读文件,另一个作为写文件。最好使用
with
while True
readline()
设置它。您可以创建一个只包含前十行的测试文件,让它工作,然后在实际目标上运行它。作为一个起点。没错,我将给出一个优化且更惯用的示例。@zeekay:新版本在编写之前是否仍将整个文件读入内存,并构造一个加入“”的修订版本?哇……您可以在一个
上使用两个
open()
语句和
?谢谢!分割线()是我在实验中遗漏的东西!我使用的文件不是很大,所以它是完美的。不确定第二个版本对“”做了什么,并且-我是否仍然需要text.splitlines()?具有不同的输入路径和输出路径不起作用-我需要修复文件,而无需手动执行任何后续操作,例如从python复制一个文件,我在尝试用新文件替换旧文件时出错(它说它无法重写旧文件,因为文件已经存在)。不知道为什么。这就是为什么我尝试只使用一个文件。没错,我会给出一个优化的更惯用的例子。@zeekay:新版本在编写之前不是仍然将整个文件读入内存并构造一个“”合并的修订版本吗?哇……你可以在一个
上使用两个
open()
语句,使用
?谢谢!分割线()是我在实验中遗漏的东西!我使用的文件不是很大,所以它是完美的。不确定第二个版本对“”做了什么,并且-我是否仍然需要text.splitlines()?具有不同的输入路径和输出路径不起作用-我需要修复文件,而无需手动执行任何后续操作,例如从python复制一个文件,我在尝试用新文件替换旧文件时出错(它说它无法重写旧文件,因为文件已经存在)。不知道为什么。这就是为什么我试图只使用一个文件。