何かする前に:あなた場合yaml.load()
を使用することはありません原則として安全ではないので、にする必要はありません。この種のシンプルな構造(タグなし)の場合は、yaml.safe_load()
(およびダンプ後にデータをsafe_loadできない場合は、対応するsafe_dump()
)を使用する必要があります。このうち
def dump(documents, stream=None, Dumper=Dumper,
default_style=None, default_flow_style=None,
canonical=None, indent=None, width=None,
allow_unicode=None, line_break=None,
encoding='utf-8', explicit_start=None, explicit_end=None,
version=None, tags=None)
のみ最初のものは与えられる必要がある、あなたのdoc
変数でなければなりません:
yaml.dump()
は、次のシグネチャがあります。ストリームを指定しない場合、dump()
はメモリ内のファイルオブジェクト(StringIOなど)にデータ構造を書き込み、書き込み後に値をstringとして返します。
だから、あなたができるものの:
with open("file_to_edit.yaml", 'w') as f:
f.write(yaml.safe_dump(doc))
これは非効率的であるとどのようにyaml.safe_dump()
作品のほとんど理解を示しています。
ファイルを読み書きする場合は、ファイル内のインデックスとを完全に切り捨ててください。書き込みのためにファイルを再オープンする方が安全であるように、これは通常、努力する価値はない:
def set_state(state):
file_name = "file_to_edit.yaml"
with open(file_name) as f:
doc = yaml.safe_load(f)
doc['state'] = state
with open(file_name, 'w') as f:
yaml.safe_dump(doc, f, default_flow_style=False)
(もちろん、あなたがオリジナルを上書きを確認するときに、ファイル名の変数を作る
ので、あなたがすることはできませんミスタイプ)。
あなたがdefault_flow_style=False
を指定しない場合は、あなたの出力は次のようになります。出力は、あなたの入力にpresent
の周りに余分の引用符は含まれません
{state: deleted}
。 default_style="'"
も指定することができますが、これはまた引用符を約state
と置きます。
引用符をなくして出力を入力と同じようにしたい場合は、ruamel.yaml
(免責事項私はそのパッケージの作者)を使用する必要があります。これは個々の文字列の引用符を保持し、YAML 1.2 YAML 1.1の代わりに)、あなたのファイルにコメントを保存します。
何らかのエラーが発生していますか? – usr2564301
いいえ、何も変更していません –
何らかの理由でファイルに書き込んでいないようです –