Python 如何替换具有特定文本的行

Python 如何替换具有特定文本的行,python,Python,我想搜索特定文本,如果该行中存在文本,则替换该行 在此代码中,我替换了第125行,但希望根据文本动态替换: file = open("config.ini", "r") lines = file.readlines() lines[125] = "minimum_value_gain = 0.01" + '\n' f.writelines(lines) f.close() 如果一条线路有以下情况,我如何确定: minimum_val

我想搜索特定文本,如果该行中存在文本,则替换该行

在此代码中,我替换了第125行,但希望根据文本动态替换:

file = open("config.ini", "r")
lines = file.readlines()
lines[125] = "minimum_value_gain = 0.01" + '\n'
f.writelines(lines)
f.close() 
如果一条线路有以下情况,我如何确定:

minimum_value_gain = 
然后将该行替换为:

minimum_value_gain = 0.01
  • 设置要查找的字符串(
    match\u string='example'

  • 有一个空的列表
    output\u list

  • 使用打开(x,y)为z的
    (这将在完成后自动关闭文件)

  • 用于文件中的每一行。readlines()
    -遍历文件的每一行

  • 如果
    match\u字符串
    在行中,则
    if
    语句将添加替换行,否则仅添加行

注意:所有变量都可以是未保留的任何名称(不要仅称为“列表”)

match_string='example'
输出列表=[]
打开(“config.ini”、“r”)作为文件:
对于文件.readlines()中的行:
如果匹配行中的字符串:
输出\u列表.append('最小\u值\u增益=0.01\n')
其他:
输出列表。追加(行)
对于Python的第一次介绍(或更具可读性的介绍),可能并不理想,但我会按如下方式解决问题:

with open('config.ini', 'r') as in_file:
    out_file = ['minimum_value_gain = 0.01\n' if 'example' in line else line for line in in_file.readlines()]

因为您要替换完整的行,所以if语句可以为您完成这个任务,所以不需要替换文本

#updated make sure one line doesn't have both values

file = open("config.ini", "r")
lines=file.readlines()
newlines = []
for line in lines:
    if "minimum_value_gain" in line:
        line = "minimum_value_gain = 0.01" + '\n'
    if "score_threshold" in line:
        line = "Values you want to add"+'\n'
    newlines.append(line)
f.writelines(newlines)
f.close() 

替换字符串中的特定文本的步骤

a = 'My name is Zano'
b = a.replace('Zano', 'Zimmer')

有点凌乱,没有经过优化,但是得到了工作,第一行读取并将
下一行文本插入到给定的pos()。如果该行不存在,则引发IndexError,否则将写入该文件

def replace_in_file(filename: str, search_text: str, string_to_add: str) -> None:
    with open(filename, "r+") as file_to_write:
        lines = file_to_write.readlines()
        file_to_write.seek(0)
        file_to_write.truncate()
        for line in lines:
            if line.startswith(search_text):
                line = line.rstrip("\n") + string_to_add + "\n"
            file_to_write.write(line)


replace_in_file("sdf.txt", "minimum_value_gain", " = 0.01")

您没有理由手动以文本方式解析
config.ini
文件。你应该用它来简化事情。该库为您读取文件,并以某种方式将其转换为dict,因此处理数据更容易。对于您的任务,您可以执行以下操作:

导入配置解析器
config=configparser.configparser()
config.read(“config.ini”)
对于配置中的节:
如果配置有“最小值增益”选项(第节):
配置设置(章节“最小值增益”、“0.01”)
将open(“config.ini”,“w”)作为f:
config.write(f)

您还可以使用Python的正则表达式库。 这里有一个例子

最好不要在同一个文件中读写,这不是好的做法。写入另一个文件,然后最终重命名它

重新导入
模式='最小值\增益'
字符串\u to \u replace='最小\u值\u增益=0.01\n'
文件=打开(“config.ini”、“r”)
fileout=open(“new_config.ini”、“a”)
lines=file.readlines()
换行符=[string_to_replace if re.match(pattern,line)else line for line in line]
f、 关闭()
fileout.writelines(行)
fileout.close()
您可以在以后重命名该文件:

导入操作系统
删除(“config.ini”)
重命名(“new_config.ini”,“config.ini”)

查看如何在python中使用
if
语句。以及如何写入文件。他想完全替换一行,而不仅仅是字符串的一部分。比如说,在文本文件夹中,当我运行此程序时,它将使其成为最小值,即0.01=0.05,这是因为您将“最小值”替换为“最小值,即0.01”+“\n”,让我为您更新答案,您在哪里打开文件进行编写?我正在修改问题中共享的脚本,我确信这是脚本的一部分不完整,而是它会给出变量f未定义错误
行和
换行都不是必需的,并且会占用内存。使用
re
对于字符串中的
sub
字符串中的
sub可以完成一些事情,而不是
line
只需对文件中的行执行
,而不是
newlines
只需执行
f.write(line)
使用
re
有点过分了,现在我不知道它是否更占用内存和时间。也许直接在文件中写入比将结果保存在列表中更好。无论如何,您的解决方案是最好的。谢谢:)无论如何,我相信正则表达式通常会比较慢,特别是因为模式编译。稍微的改进是在循环之前执行
re.compile(pattern)
,然后在循环内部执行
pattern.match(line)
(顺便说一句,您在
re.match(pattern,)中忘记了