🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1313閲覧

Python YAMLの書き込みについて

Gur

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/04 08:51

現在PythonでDiscordのBotを作成しており、サーバー毎に設定を保存するためYAMLをインポートしコーディングをしておりました。

Python

1with open("setting.yaml", "w", encoding="utf-8") as yf: 2 yaml.dump({ 3 "Setting_Info": { 4 "Server_ID": random.randrange(1,100), 5 "Random_Num": random.randrange(1,100) 6 } 7 }, yf,encoding='utf8', allow_unicode=True ,default_flow_style=False)

実行すると「setting.yaml」に書き込むことは成功しますが、何度実行しても1サーバー情報しか保存できませんでした。
上書きするのではなくServer_IDが一致した場合は書き換え、ない場合は追記という風に処理するにはどうしたらいいでしょうか。

ご教授いただけますと幸いです、よろしくお願いいたします。

環境:Python 3.9.0 YAML 5.4.1 Visual Studio Code 1.53.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

以下のような処理を作ることになるでしょう。

  • setting.yaml を読み込む
    ・dictのリストになる観じでしょうか?
  • 中に入っているServer_IDの一覧を取得する。
  • 新しいServer_IDを生成する(ランダム?)
  • 対応するRandom_Numを生成する
  • 一覧にあれば、 、Random_Numを書き換え、無ければ、リストに新たなエントリを追加する。
  • 更新したリストをyamlとして書き出す

投稿2021/03/04 11:05

TakaiY

総合スコア13758

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gur

2021/03/05 07:46

回答ありがとうございます。 一度読み込まないといけないということですね。 もう一度読み込みの方を詳しく調べてみたいと思います。ありがとうございます。
TakaiY

2021/03/05 10:46

そうですね。「Server_IDが一致した場合は書き換え、ない場合は追記」ということであれば、一度読み込んでそれを修正して書き出すという操作をするのが普通ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問