PyYaml - overwrite yaml file automatically with inserted argparse parametersYAML Configuration fileParse a...
Indicating multiple different modes of speech (fantasy language or telepathy)
Bob has never been a M before
Partial sums of primes
Lifted its hind leg on or lifted its hind leg towards?
What if somebody invests in my application?
Books on the History of math research at European universities
Proof of Lemma: Every integer can be written as a product of primes
Does "Dominei" mean something?
Visiting the UK as unmarried couple
I2C signal and power over long range (10meter cable)
Can I use my Chinese passport to enter China after I acquired another citizenship?
A known event to a history junkie
Can somebody explain Brexit in a few child-proof sentences?
What to do when my ideas aren't chosen, when I strongly disagree with the chosen solution?
Stereotypical names
Latex for-and in equation
Do all polymers contain either carbon or silicon?
Organic chemistry Iodoform Reaction
Why isn't KTEX's runway designation 10/28 instead of 9/27?
Could solar power be utilized and substitute coal in the 19th century?
Meta programming: Declare a new struct on the fly
Lightning Web Component - do I need to track changes for every single input field in a form
My boss asked me to take a one-day class, then signs it up as a day off
Should a half Jewish man be discouraged from marrying a Jewess?
PyYaml - overwrite yaml file automatically with inserted argparse parameters
YAML Configuration fileParse a config-file and add to command-line-arguments using argparse in PythonAutotools detect YAML libraryAttempt at Abstracted YAML Configuration LoaderBuild scripts driven from yaml fileUsing argparse with parameters defined in config fileSimple YAML-based config file parserConverting Logstash YAML style configuration file into ElasticSearch Logstash JSON style configPyYAML - Saving data to .yaml filesParse YAML file with nested parameters as a Python class object
$begingroup$
what I am loading a yaml file and updating it with argparse. what is your feedback on how to update yaml parameters automatically without checking if a argparse parameter is None.
There are almost 20 configuration parameters that with this current version I have to put 20 if
conditions.
the output of yaml.save_load is:
import os
import argparse
import yaml
import functools
import datetime
parser = argparse.ArgumentParser()
parser.add_argument(
"--config",
nargs="?",
type=str,
default="p.yml",
help="Configuration file to use",
)
parser.add_argument('--learning_rate', type=float, default=0.001, help='learning rate amount')
args = parser.parse_args()
def yaml_dump(file_path, data):
"""
Write data into yaml file in file_path
:param file_path:
:param data:
:return: void
"""
with open(file_path, 'w') as file_descriptor:
yaml.safe_dump(data, file_descriptor)
def yaml_loader(file_path):
"""
Load yaml file
:param file_path:
:return: yaml file configuration
"""
with open(file_path, "r") as file_descriptor:
return yaml.safe_load(file_descriptor)
cfg = yaml_loader(args.config)
if args.learning_rate is not None:
cfg['training']['optimizer']['lr'] = args.learning_rate
ts = str(datetime.datetime.now()).split(".")[0].replace(" ", "_")
ts = ts.replace(":", "_").replace("-", "_")
logdir = os.path.join("runs", os.path.basename(args.config)[:-4], ts)
yaml_dump(os.path.join(logdir, args.config.split('/')[-1]), cfg)
here is the content of p.yaml
file:
model:
arch: fcn8s
data:
dataset: pascal
train_split: train
val_split: val
img_rows: 'same'
img_cols: 'same'
path: VOC/
sbd_path: VOC/benchmark_RELEASE/
training:
train_iters: 300000
batch_size: 1
val_interval: 1000
n_workers: 16
print_interval: 50
optimizer:
name: 'sgd'
lr: 1.0e-10
weight_decay: 0.0005
momentum: 0.99
loss:
name: 'cross_entropy'
size_average: False
lr_schedule:
resume: fcn8s_pascal_best_model.pkl
python yaml
New contributor
$endgroup$
add a comment |
$begingroup$
what I am loading a yaml file and updating it with argparse. what is your feedback on how to update yaml parameters automatically without checking if a argparse parameter is None.
There are almost 20 configuration parameters that with this current version I have to put 20 if
conditions.
the output of yaml.save_load is:
import os
import argparse
import yaml
import functools
import datetime
parser = argparse.ArgumentParser()
parser.add_argument(
"--config",
nargs="?",
type=str,
default="p.yml",
help="Configuration file to use",
)
parser.add_argument('--learning_rate', type=float, default=0.001, help='learning rate amount')
args = parser.parse_args()
def yaml_dump(file_path, data):
"""
Write data into yaml file in file_path
:param file_path:
:param data:
:return: void
"""
with open(file_path, 'w') as file_descriptor:
yaml.safe_dump(data, file_descriptor)
def yaml_loader(file_path):
"""
Load yaml file
:param file_path:
:return: yaml file configuration
"""
with open(file_path, "r") as file_descriptor:
return yaml.safe_load(file_descriptor)
cfg = yaml_loader(args.config)
if args.learning_rate is not None:
cfg['training']['optimizer']['lr'] = args.learning_rate
ts = str(datetime.datetime.now()).split(".")[0].replace(" ", "_")
ts = ts.replace(":", "_").replace("-", "_")
logdir = os.path.join("runs", os.path.basename(args.config)[:-4], ts)
yaml_dump(os.path.join(logdir, args.config.split('/')[-1]), cfg)
here is the content of p.yaml
file:
model:
arch: fcn8s
data:
dataset: pascal
train_split: train
val_split: val
img_rows: 'same'
img_cols: 'same'
path: VOC/
sbd_path: VOC/benchmark_RELEASE/
training:
train_iters: 300000
batch_size: 1
val_interval: 1000
n_workers: 16
print_interval: 50
optimizer:
name: 'sgd'
lr: 1.0e-10
weight_decay: 0.0005
momentum: 0.99
loss:
name: 'cross_entropy'
size_average: False
lr_schedule:
resume: fcn8s_pascal_best_model.pkl
python yaml
New contributor
$endgroup$
2
$begingroup$
Welcome to Code Review! Code Review is a platform where you can get feedback from other users on working code. Questions on how to fix certain errors are better suited for Stack Overflow. See also How to ask.
$endgroup$
– Alex
yesterday
$begingroup$
@Alex I have updated the code with a working code. now I am asking other users about their feedback on how to make it more efficient. Is it still not suited for StackExchange?
$endgroup$
– Majid Azimi
yesterday
2
$begingroup$
There's a space beforedef yaml_dump
please ensure that this code does run :)
$endgroup$
– Peilonrayz
yesterday
$begingroup$
@Peilonrayz it has been corrected.
$endgroup$
– Majid Azimi
yesterday
1
$begingroup$
Depending on how the file is used, PyYAML is not really suited for this kind of updating. If the file needs to stay as much the same as possible, e.g. when it is checked into a revision control system, you'll run into spurious changes, like the key order of mappings, loss of superfluous quotes, and if there had been comments those are lost as well. You also have to adhere to YAML 1.1 (replaced in 2009 by YAML 1.2, which PyYAML hasn't been updated to).
$endgroup$
– Anthon
yesterday
add a comment |
$begingroup$
what I am loading a yaml file and updating it with argparse. what is your feedback on how to update yaml parameters automatically without checking if a argparse parameter is None.
There are almost 20 configuration parameters that with this current version I have to put 20 if
conditions.
the output of yaml.save_load is:
import os
import argparse
import yaml
import functools
import datetime
parser = argparse.ArgumentParser()
parser.add_argument(
"--config",
nargs="?",
type=str,
default="p.yml",
help="Configuration file to use",
)
parser.add_argument('--learning_rate', type=float, default=0.001, help='learning rate amount')
args = parser.parse_args()
def yaml_dump(file_path, data):
"""
Write data into yaml file in file_path
:param file_path:
:param data:
:return: void
"""
with open(file_path, 'w') as file_descriptor:
yaml.safe_dump(data, file_descriptor)
def yaml_loader(file_path):
"""
Load yaml file
:param file_path:
:return: yaml file configuration
"""
with open(file_path, "r") as file_descriptor:
return yaml.safe_load(file_descriptor)
cfg = yaml_loader(args.config)
if args.learning_rate is not None:
cfg['training']['optimizer']['lr'] = args.learning_rate
ts = str(datetime.datetime.now()).split(".")[0].replace(" ", "_")
ts = ts.replace(":", "_").replace("-", "_")
logdir = os.path.join("runs", os.path.basename(args.config)[:-4], ts)
yaml_dump(os.path.join(logdir, args.config.split('/')[-1]), cfg)
here is the content of p.yaml
file:
model:
arch: fcn8s
data:
dataset: pascal
train_split: train
val_split: val
img_rows: 'same'
img_cols: 'same'
path: VOC/
sbd_path: VOC/benchmark_RELEASE/
training:
train_iters: 300000
batch_size: 1
val_interval: 1000
n_workers: 16
print_interval: 50
optimizer:
name: 'sgd'
lr: 1.0e-10
weight_decay: 0.0005
momentum: 0.99
loss:
name: 'cross_entropy'
size_average: False
lr_schedule:
resume: fcn8s_pascal_best_model.pkl
python yaml
New contributor
$endgroup$
what I am loading a yaml file and updating it with argparse. what is your feedback on how to update yaml parameters automatically without checking if a argparse parameter is None.
There are almost 20 configuration parameters that with this current version I have to put 20 if
conditions.
the output of yaml.save_load is:
import os
import argparse
import yaml
import functools
import datetime
parser = argparse.ArgumentParser()
parser.add_argument(
"--config",
nargs="?",
type=str,
default="p.yml",
help="Configuration file to use",
)
parser.add_argument('--learning_rate', type=float, default=0.001, help='learning rate amount')
args = parser.parse_args()
def yaml_dump(file_path, data):
"""
Write data into yaml file in file_path
:param file_path:
:param data:
:return: void
"""
with open(file_path, 'w') as file_descriptor:
yaml.safe_dump(data, file_descriptor)
def yaml_loader(file_path):
"""
Load yaml file
:param file_path:
:return: yaml file configuration
"""
with open(file_path, "r") as file_descriptor:
return yaml.safe_load(file_descriptor)
cfg = yaml_loader(args.config)
if args.learning_rate is not None:
cfg['training']['optimizer']['lr'] = args.learning_rate
ts = str(datetime.datetime.now()).split(".")[0].replace(" ", "_")
ts = ts.replace(":", "_").replace("-", "_")
logdir = os.path.join("runs", os.path.basename(args.config)[:-4], ts)
yaml_dump(os.path.join(logdir, args.config.split('/')[-1]), cfg)
here is the content of p.yaml
file:
model:
arch: fcn8s
data:
dataset: pascal
train_split: train
val_split: val
img_rows: 'same'
img_cols: 'same'
path: VOC/
sbd_path: VOC/benchmark_RELEASE/
training:
train_iters: 300000
batch_size: 1
val_interval: 1000
n_workers: 16
print_interval: 50
optimizer:
name: 'sgd'
lr: 1.0e-10
weight_decay: 0.0005
momentum: 0.99
loss:
name: 'cross_entropy'
size_average: False
lr_schedule:
resume: fcn8s_pascal_best_model.pkl
python yaml
python yaml
New contributor
New contributor
edited yesterday
Majid Azimi
New contributor
asked yesterday
Majid AzimiMajid Azimi
992
992
New contributor
New contributor
2
$begingroup$
Welcome to Code Review! Code Review is a platform where you can get feedback from other users on working code. Questions on how to fix certain errors are better suited for Stack Overflow. See also How to ask.
$endgroup$
– Alex
yesterday
$begingroup$
@Alex I have updated the code with a working code. now I am asking other users about their feedback on how to make it more efficient. Is it still not suited for StackExchange?
$endgroup$
– Majid Azimi
yesterday
2
$begingroup$
There's a space beforedef yaml_dump
please ensure that this code does run :)
$endgroup$
– Peilonrayz
yesterday
$begingroup$
@Peilonrayz it has been corrected.
$endgroup$
– Majid Azimi
yesterday
1
$begingroup$
Depending on how the file is used, PyYAML is not really suited for this kind of updating. If the file needs to stay as much the same as possible, e.g. when it is checked into a revision control system, you'll run into spurious changes, like the key order of mappings, loss of superfluous quotes, and if there had been comments those are lost as well. You also have to adhere to YAML 1.1 (replaced in 2009 by YAML 1.2, which PyYAML hasn't been updated to).
$endgroup$
– Anthon
yesterday
add a comment |
2
$begingroup$
Welcome to Code Review! Code Review is a platform where you can get feedback from other users on working code. Questions on how to fix certain errors are better suited for Stack Overflow. See also How to ask.
$endgroup$
– Alex
yesterday
$begingroup$
@Alex I have updated the code with a working code. now I am asking other users about their feedback on how to make it more efficient. Is it still not suited for StackExchange?
$endgroup$
– Majid Azimi
yesterday
2
$begingroup$
There's a space beforedef yaml_dump
please ensure that this code does run :)
$endgroup$
– Peilonrayz
yesterday
$begingroup$
@Peilonrayz it has been corrected.
$endgroup$
– Majid Azimi
yesterday
1
$begingroup$
Depending on how the file is used, PyYAML is not really suited for this kind of updating. If the file needs to stay as much the same as possible, e.g. when it is checked into a revision control system, you'll run into spurious changes, like the key order of mappings, loss of superfluous quotes, and if there had been comments those are lost as well. You also have to adhere to YAML 1.1 (replaced in 2009 by YAML 1.2, which PyYAML hasn't been updated to).
$endgroup$
– Anthon
yesterday
2
2
$begingroup$
Welcome to Code Review! Code Review is a platform where you can get feedback from other users on working code. Questions on how to fix certain errors are better suited for Stack Overflow. See also How to ask.
$endgroup$
– Alex
yesterday
$begingroup$
Welcome to Code Review! Code Review is a platform where you can get feedback from other users on working code. Questions on how to fix certain errors are better suited for Stack Overflow. See also How to ask.
$endgroup$
– Alex
yesterday
$begingroup$
@Alex I have updated the code with a working code. now I am asking other users about their feedback on how to make it more efficient. Is it still not suited for StackExchange?
$endgroup$
– Majid Azimi
yesterday
$begingroup$
@Alex I have updated the code with a working code. now I am asking other users about their feedback on how to make it more efficient. Is it still not suited for StackExchange?
$endgroup$
– Majid Azimi
yesterday
2
2
$begingroup$
There's a space before
def yaml_dump
please ensure that this code does run :)$endgroup$
– Peilonrayz
yesterday
$begingroup$
There's a space before
def yaml_dump
please ensure that this code does run :)$endgroup$
– Peilonrayz
yesterday
$begingroup$
@Peilonrayz it has been corrected.
$endgroup$
– Majid Azimi
yesterday
$begingroup$
@Peilonrayz it has been corrected.
$endgroup$
– Majid Azimi
yesterday
1
1
$begingroup$
Depending on how the file is used, PyYAML is not really suited for this kind of updating. If the file needs to stay as much the same as possible, e.g. when it is checked into a revision control system, you'll run into spurious changes, like the key order of mappings, loss of superfluous quotes, and if there had been comments those are lost as well. You also have to adhere to YAML 1.1 (replaced in 2009 by YAML 1.2, which PyYAML hasn't been updated to).
$endgroup$
– Anthon
yesterday
$begingroup$
Depending on how the file is used, PyYAML is not really suited for this kind of updating. If the file needs to stay as much the same as possible, e.g. when it is checked into a revision control system, you'll run into spurious changes, like the key order of mappings, loss of superfluous quotes, and if there had been comments those are lost as well. You also have to adhere to YAML 1.1 (replaced in 2009 by YAML 1.2, which PyYAML hasn't been updated to).
$endgroup$
– Anthon
yesterday
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
While you cannot iterate over a Namespace
directly, you can parse it into a dictionary using vars
and iterate over that, if you have a mapping from the argparse name to the path in the config file. The hardest part is using this path to get to the right level in the dictionary:
from argparse import Namespace
# Hard-code command line arguments instead of parsing them
args = Namespace(learning_rate=0.001)
# fake having read the config file
cfg = {"training": {"optimizer": {"lr": 0}}}
# mapping from argparse name to path in config file
cfg_path = {"learning_rate": ('training', 'optimizer', 'lr')}
for name, value in vars(args).items():
if value is None:
continue
# go down to right level
d = cfg
keys = cfg_path[name]
for key in keys[:-1]:
d = d[key]
# assign value, using the fact that dictionaries are mutable
d[keys[-1]] = value
This will override values where you have a default value in argparse that is not None
, which may for example change the order in which elements appear in your dictionaries.
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Majid Azimi is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216129%2fpyyaml-overwrite-yaml-file-automatically-with-inserted-argparse-parameters%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
While you cannot iterate over a Namespace
directly, you can parse it into a dictionary using vars
and iterate over that, if you have a mapping from the argparse name to the path in the config file. The hardest part is using this path to get to the right level in the dictionary:
from argparse import Namespace
# Hard-code command line arguments instead of parsing them
args = Namespace(learning_rate=0.001)
# fake having read the config file
cfg = {"training": {"optimizer": {"lr": 0}}}
# mapping from argparse name to path in config file
cfg_path = {"learning_rate": ('training', 'optimizer', 'lr')}
for name, value in vars(args).items():
if value is None:
continue
# go down to right level
d = cfg
keys = cfg_path[name]
for key in keys[:-1]:
d = d[key]
# assign value, using the fact that dictionaries are mutable
d[keys[-1]] = value
This will override values where you have a default value in argparse that is not None
, which may for example change the order in which elements appear in your dictionaries.
$endgroup$
add a comment |
$begingroup$
While you cannot iterate over a Namespace
directly, you can parse it into a dictionary using vars
and iterate over that, if you have a mapping from the argparse name to the path in the config file. The hardest part is using this path to get to the right level in the dictionary:
from argparse import Namespace
# Hard-code command line arguments instead of parsing them
args = Namespace(learning_rate=0.001)
# fake having read the config file
cfg = {"training": {"optimizer": {"lr": 0}}}
# mapping from argparse name to path in config file
cfg_path = {"learning_rate": ('training', 'optimizer', 'lr')}
for name, value in vars(args).items():
if value is None:
continue
# go down to right level
d = cfg
keys = cfg_path[name]
for key in keys[:-1]:
d = d[key]
# assign value, using the fact that dictionaries are mutable
d[keys[-1]] = value
This will override values where you have a default value in argparse that is not None
, which may for example change the order in which elements appear in your dictionaries.
$endgroup$
add a comment |
$begingroup$
While you cannot iterate over a Namespace
directly, you can parse it into a dictionary using vars
and iterate over that, if you have a mapping from the argparse name to the path in the config file. The hardest part is using this path to get to the right level in the dictionary:
from argparse import Namespace
# Hard-code command line arguments instead of parsing them
args = Namespace(learning_rate=0.001)
# fake having read the config file
cfg = {"training": {"optimizer": {"lr": 0}}}
# mapping from argparse name to path in config file
cfg_path = {"learning_rate": ('training', 'optimizer', 'lr')}
for name, value in vars(args).items():
if value is None:
continue
# go down to right level
d = cfg
keys = cfg_path[name]
for key in keys[:-1]:
d = d[key]
# assign value, using the fact that dictionaries are mutable
d[keys[-1]] = value
This will override values where you have a default value in argparse that is not None
, which may for example change the order in which elements appear in your dictionaries.
$endgroup$
While you cannot iterate over a Namespace
directly, you can parse it into a dictionary using vars
and iterate over that, if you have a mapping from the argparse name to the path in the config file. The hardest part is using this path to get to the right level in the dictionary:
from argparse import Namespace
# Hard-code command line arguments instead of parsing them
args = Namespace(learning_rate=0.001)
# fake having read the config file
cfg = {"training": {"optimizer": {"lr": 0}}}
# mapping from argparse name to path in config file
cfg_path = {"learning_rate": ('training', 'optimizer', 'lr')}
for name, value in vars(args).items():
if value is None:
continue
# go down to right level
d = cfg
keys = cfg_path[name]
for key in keys[:-1]:
d = d[key]
# assign value, using the fact that dictionaries are mutable
d[keys[-1]] = value
This will override values where you have a default value in argparse that is not None
, which may for example change the order in which elements appear in your dictionaries.
answered 15 hours ago
GraipherGraipher
26.4k54092
26.4k54092
add a comment |
add a comment |
Majid Azimi is a new contributor. Be nice, and check out our Code of Conduct.
Majid Azimi is a new contributor. Be nice, and check out our Code of Conduct.
Majid Azimi is a new contributor. Be nice, and check out our Code of Conduct.
Majid Azimi is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216129%2fpyyaml-overwrite-yaml-file-automatically-with-inserted-argparse-parameters%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
$begingroup$
Welcome to Code Review! Code Review is a platform where you can get feedback from other users on working code. Questions on how to fix certain errors are better suited for Stack Overflow. See also How to ask.
$endgroup$
– Alex
yesterday
$begingroup$
@Alex I have updated the code with a working code. now I am asking other users about their feedback on how to make it more efficient. Is it still not suited for StackExchange?
$endgroup$
– Majid Azimi
yesterday
2
$begingroup$
There's a space before
def yaml_dump
please ensure that this code does run :)$endgroup$
– Peilonrayz
yesterday
$begingroup$
@Peilonrayz it has been corrected.
$endgroup$
– Majid Azimi
yesterday
1
$begingroup$
Depending on how the file is used, PyYAML is not really suited for this kind of updating. If the file needs to stay as much the same as possible, e.g. when it is checked into a revision control system, you'll run into spurious changes, like the key order of mappings, loss of superfluous quotes, and if there had been comments those are lost as well. You also have to adhere to YAML 1.1 (replaced in 2009 by YAML 1.2, which PyYAML hasn't been updated to).
$endgroup$
– Anthon
yesterday