質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python

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

Q&A

1回答

526閲覧

PythonのshelveモジュールのバイナリファイルにInputで入力した値を保存したい

asianLad

総合スコア16

Python

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

0グッド

0クリップ

投稿2021/06/21 03:16

編集2021/06/21 21:54

解決したいこと

Shelveモジュールについて質問が二つあります。
サンプルコードは下にあります。

1.Pythonのshelveモジュールに保存された辞書型から値を取り出したい場合はどのように書いたら取り出せますでしょうか?
2.Pythonのshelveモジュールで作成されたバイナリファイルにユーザーにinput()メゾットで入力させた値を保存して更新したいです。
例えば下記のコードで言うと辞書型のデータが保存してある変数「menubook['breakfast'] 」に"desert":"pudding"のようなデータをユーザーがinputで入れてそれを保存するにはどのようにしたら良いでしょうか?open()やwrite()メゾットの基本的な使い方は学んでおりそれを使えばできるのはわかっているのですが自分で実際にコードに書くことができませんでした。

該当するソースコード

python

1import shelve 2menubook = shelve.open('menu_data') 3 4menubook['breakfast'] = {'main':'toast', 'sub':'egg', 'drink':'milk'} 5menubook['lunch'] = {'main':'spam', 'sub':'ham', 'drink':'juice' } 6 7print(menubook['lunch']) 8 9menubook.close()

自分で試したこと

関連書籍やWEBサイトなどで調べましたが見つけることができませんでした。

追記

下記のように書き直してみたがプログラムを再度、実行すると値が保存されていなかったのでどのようにしたら保存が反映されるか教えて頂けると助かります。

python

1import shelve 2menubook = shelve.open('menu_data', writeback=True) 3 4menubookA = {'main':'toast', 'sub':'egg', 'drink':'milk'} 5 6print(menubookA) 7print(menubookA['drink']) 8 9key = input("Enter key: ") 10value = input("Enter value: ") 11 12menubookA[key] = value 13print(menubookA) #ここでは問題なくkeyとvalueが追加されている 14 15menubook.close()

よろしくお願いします。

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

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

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

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

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

quickquip

2021/06/21 03:29

WEBサイトとは公式ドキュメントのことですか?
asianLad

2021/06/21 21:58

ご回答ありがとうございます。はい、公式ドキュメントも含めて確認しました。
guest

回答1

0

こういうことができれば良いですか?

python

1>>> import shelve 2>>> 3>>> menubook = shelve.open('menu_data', writeback=True) 4>>> print(menubook['breakfast']) 5{'main': 'toast', 'sub': 'egg', 'drink': 'milk'} 6>>> menubook['breakfast']["desert"] = "pudding" 7>>> menubook.close() 8>>> del menubook 9>>> menubook = shelve.open('menu_data') 10>>> print(menubook['breakfast']) 11{'main': 'toast', 'sub': 'egg', 'drink': 'milk', 'desert': 'pudding'}

openするときに、writeback=Trueを付けておくと、closeするときに、変更結果が反映されます。

投稿2021/06/21 04:02

編集2021/06/21 04:04
ppaul

総合スコア24666

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

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

asianLad

2021/06/21 21:56

ご回答ありがとうございます。 そのまま使用したらエラーが出てしまったので上記のコードを参考にして以下のように書いてみたのですが、バイナリのファイルに変更が保存されておらずプログラムを再度実行すると元に戻ってしますのですがどのようにして追加したデータを永続化できますでしょうか。 ```python import shelve menubook = shelve.open('menu_data', writeback=True) menubookA = {'main':'toast', 'sub':'egg', 'drink':'milk'} print(menubookA) print(menubookA['drink']) key = input("Enter key: ") value = input("Enter value: ") menubookA[key] = value print(menubookA) #ここでは問題なくkeyとvalueが追加されている menubook.close() ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問