YAML查找和替换文本Python
我有一些YAML格式的文件,我需要在$title文件中找到文本并替换为我指定的内容。配置文件的大致外观: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:
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不,但是文件在那之后就完全空了,谢谢你。是否可以在文件中进行更改并将其保存到同一个文件中,以避免创建副本?编辑为原地写入感谢您的回答