Python 如何替换具有特定文本的行
我想搜索特定文本,如果该行中存在文本,则替换该行 在此代码中,我替换了第125行,但希望根据文本动态替换: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
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,)中忘记了行
)