YAML查找和替换文本Python

YAML查找和替换文本Python,python,yaml,Python,Yaml,我有一些YAML格式的文件,我需要在$title文件中找到文本并替换为我指定的内容。配置文件的大致外观: JoinGame-MOTD: Enabled: true Messages: - '$title' YAML文件可能看起来不同,因此我希望生成一个通用代码,它不会获取任何特定字符串,而是用我指定的内容替换所有$title 我想做的是: import sys import yaml with open(r'config.yml', 'w') as file:

我有一些YAML格式的文件,我需要在$title文件中找到文本并替换为我指定的内容。配置文件的大致外观:

JoinGame-MOTD:
  Enabled: true
  Messages:
  - '$title'
YAML文件可能看起来不同,因此我希望生成一个通用代码,它不会获取任何特定字符串,而是用我指定的内容替换所有$title

我想做的是:

import sys
import yaml

with open(r'config.yml', 'w') as file:
    
    def tr(s):
        return s.replace('$title', 'Test')

        yaml.dump(file, sys.stdout, transform=tr)

请帮帮我。没有必要使用我的代码,我会很高兴看到任何适合我的示例

可能更容易不使用yaml包

以open(“file.yml”,“r”)作为fin的
:
以open(“file_replaced.yml”、“w”)作为fout:
对于fin中的行:
fout.write(行.替换(“$title”,“Test”))
编辑:

更新到位

打开(“config.yml”,“r+”)作为f:
contents=f.read()
f、 搜索(0)
f、 写入(contents.replace(“$title”,“Test”))
f、 截断()

您还可以一次性读取和写入数据
os.path.join
是可选的,它确保相对于脚本存储的路径读取
yaml
文件

import re
import os

with open(os.path.join(os.path.dirname(__file__), 'temp.yaml'), 'r+') as f:
    data = f.read()
    f.seek(0)
    new_data = data.replace('$title', 'replaced!')
    f.write(new_data)
    f.truncate()
如果您希望动态替换
$title
之外的其他关键字,如
$description
$name
,您可以使用如下正则表达式编写函数:

def replaceString(text_to_search, keyword, replacement):
    return re.sub(f"(\${keyword})[\W]", replacement, text_to_search)

replaceString('My name is $name', '$name', 'Bob')

那么,你的代码是如何为你工作的呢?你有什么需要改进的地方吗?看看,也许它的答案会有帮助。你有什么错误吗?如果是这样的话,你能告诉我们是哪一个吗?@Axiumin_uuuu不,但是文件在那之后就完全空了,谢谢你。是否可以在文件中进行更改并将其保存到同一个文件中,以避免创建副本?编辑为原地写入感谢您的回答