📅  最后修改于: 2023-12-03 14:56:57.129000             🧑  作者: Mango
在 Python 中,我们可以使用 PyYAML 这个库来读写 YAML 文件。当我们需要写入 YAML 文件时,常见的做法是将要写入的内容先转换成 Python 数据结构,再用 PyYAML 将其写入文件中。但是如果我们只需要修改 YAML 文件中的某些内容,并且不想将整个文件读入内存再写回文件,该怎么做呢?下面是一种可行的方法。
import io
import yaml
def update_yaml_file(filename, updates):
# 读入 YAML 文件
with open(filename) as f:
data = yaml.safe_load(f)
# 更新数据
for key, value in updates.items():
key_parts = key.split('.')
d = data
for k in key_parts[:-1]:
d = d.setdefault(k, {})
d[key_parts[-1]] = value
# 将数据写回文件
with io.open(filename, 'w', encoding='utf8') as f:
yaml.dump(data, f, default_flow_style=False, allow_unicode=True)
上面的代码中,filename
表示要修改的 YAML 文件路径,updates
是一个字典,包含所有要更新的数据键和值,键和值的类型可以是任意合法的 Python 数据类型。下面是一个使用示例:
updates = {
'database.host': 'localhost',
'database.port': 5433,
'database.username': 'john',
'database.password': 'secret'
}
update_yaml_file('config.yaml', updates)
这样,就会将 config.yaml
文件中的 database
部分中的 host
、port
、username
和 password
四个键的值分别更新为 'localhost'
、5433
、'john'
和 'secret'
。如果原来的 YAML 文件如下所示:
database:
host: test.example.com
port: 5432
username: alice
password: p@ssw0rd
那么更新后的 YAML 文件应该是这样的:
database:
host: localhost
port: 5433
username: john
password: secret
需要注意的是,上面的代码只适用于更新现有的键值对,如果要添加新的键值对或者删除已有的键值对,就需要对代码进行相应的修改。
以上就是如何编写 YAML 文件而不删除内容的介绍,希望对你有所帮助。