YAML:dump_all 保存一个空文件
YAML: dump_all saves an empty file
我正在尝试打开一个 yaml 文件,更新一个值并保存它。我已经按照 Whosebug 上已经提供的许多示例进行操作,但它仍然不起作用。
我的代码:
导入 yaml
def update(x:int):
with open("fileWithValues.yaml", "r") as yaml_file:
try:
docs=yaml.load_all(yaml_file, Loader=yaml.SafeLoader)
for doc in docs:
for key, value in doc.items():
if value == "city":
doc["year"]["value"] = x
break
with open("fileWithValues.yaml", 'w') as yaml_file:
yaml.dump_all(docs, yaml_file, default_flow_style=False)
except yaml.YAMLError as exc:
print(exc)
如前所述,为了创建代码,我遵循了 Whosebug 中的几个示例。但是,在执行代码之后,它似乎正在打开要写入的文件,但它仍然是空的。总而言之,我阅读文件的第一部分有效。它应该转储所有文件的部分没有。它不会抛出任何异常或错误消息。它只是保存一个空文件。
附加信息:我正在阅读的文件包含两个文档。而我更新的值在第二个。
更新:用于获取第一个数据的示例文件
---
apiVersion: v1
kind: Service
metadata:
name: aa
labels:
app: aa
service: aa
spec:
selector:
app: aa
ports:
- name: tcp-send
port: 9000
---
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: capture-v1
labels:
app: aa
version: v1
spec:
replicas: 5
selector:
matchLabels:
app: aa
version: v1
template:
metadata:
labels:
app: aa
version: v1
spec:
containers:
- name: aa
image: someimage:0.3
ports:
- name: tcp-send
containerPort: 9000
volumeMounts:
- name: bb-aa
mountPath: /etc/localtime
volumes:
- name: bb-aa
hostPath:
path: /path/
nodeSelector:
kubernetes.io/hostname: serve3
...
要更改的目标参数是:第二个文档,规范,replicas
您的 with
语句是嵌套的,因此您正在以写入模式打开文件,而文件已经以读取模式打开。像这样分开它们:
def update(x:int):
try:
with open("fileWithValues.yaml", "r") as yaml_file:
docs = list(yaml.load_all(yaml_file, Loader=yaml.SafeLoader))
for doc in docs:
for key, value in doc.items():
if value == "city":
doc["year"]["value"] = x
break
with open("fileWithValues.yaml", 'w') as yaml_file:
yaml.dump_all(docs, yaml_file, default_flow_style=False)
except yaml.YAMLError as exc:
print(exc)
我正在尝试打开一个 yaml 文件,更新一个值并保存它。我已经按照 Whosebug 上已经提供的许多示例进行操作,但它仍然不起作用。
我的代码: 导入 yaml
def update(x:int):
with open("fileWithValues.yaml", "r") as yaml_file:
try:
docs=yaml.load_all(yaml_file, Loader=yaml.SafeLoader)
for doc in docs:
for key, value in doc.items():
if value == "city":
doc["year"]["value"] = x
break
with open("fileWithValues.yaml", 'w') as yaml_file:
yaml.dump_all(docs, yaml_file, default_flow_style=False)
except yaml.YAMLError as exc:
print(exc)
如前所述,为了创建代码,我遵循了 Whosebug 中的几个示例。但是,在执行代码之后,它似乎正在打开要写入的文件,但它仍然是空的。总而言之,我阅读文件的第一部分有效。它应该转储所有文件的部分没有。它不会抛出任何异常或错误消息。它只是保存一个空文件。
附加信息:我正在阅读的文件包含两个文档。而我更新的值在第二个。
更新:用于获取第一个数据的示例文件
---
apiVersion: v1
kind: Service
metadata:
name: aa
labels:
app: aa
service: aa
spec:
selector:
app: aa
ports:
- name: tcp-send
port: 9000
---
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: capture-v1
labels:
app: aa
version: v1
spec:
replicas: 5
selector:
matchLabels:
app: aa
version: v1
template:
metadata:
labels:
app: aa
version: v1
spec:
containers:
- name: aa
image: someimage:0.3
ports:
- name: tcp-send
containerPort: 9000
volumeMounts:
- name: bb-aa
mountPath: /etc/localtime
volumes:
- name: bb-aa
hostPath:
path: /path/
nodeSelector:
kubernetes.io/hostname: serve3
...
要更改的目标参数是:第二个文档,规范,replicas
您的 with
语句是嵌套的,因此您正在以写入模式打开文件,而文件已经以读取模式打开。像这样分开它们:
def update(x:int):
try:
with open("fileWithValues.yaml", "r") as yaml_file:
docs = list(yaml.load_all(yaml_file, Loader=yaml.SafeLoader))
for doc in docs:
for key, value in doc.items():
if value == "city":
doc["year"]["value"] = x
break
with open("fileWithValues.yaml", 'w') as yaml_file:
yaml.dump_all(docs, yaml_file, default_flow_style=False)
except yaml.YAMLError as exc:
print(exc)