![見出し画像](https://assets.st-note.com/production/uploads/images/132039485/rectangle_large_type_2_a46f53a2169cfd3e61a18fe3df71c1ab.jpeg?width=1200)
リストを永続化したい
(python学習の備忘録です)
発音記号(ピンイン・注音)とか、「覚えたかどうか」とか「これまで繰り返した回数」とか「習熟度」とか、「最後に確認した日時」とか、学習の進捗に応じたデータをいろいろ保存していくことも想定します。アプリを中断して、後で再開したときに前回までの状況がそのまま再現される、学習進捗も保持されているというのが目標。
「リスト」構造の保存、読み出しを調べていたら、pickleというモジュールを使うらしい。
但し、pickleはバイナリファイルになるそうなので、自分の目的にはテキストでjsonファイル使った方がよさそうだと判断。
こちらの練習してみます。まずこんなデータを想定。
単語、発音(ピンイン)、習熟レベル
電話 diànhuà 0
時間 shíjiān 1
小時 xiăoshí 3
これが何十個かセットになっている想定(ここでは簡便のため三語だけにしておきます。)習熟レベルは例えば、発音を覚えていたら+1、忘れていたらゼロに戻る。3まで行けばとりあえず覚えたと見なす……というような使い方を想定します。
このあたりの操作、設定したリストデータをJSONで保存し、それを読み出し、そのテキストからリスト復元とかいろいろやってみる。
import json
wordlist=[['電話','diànhuà',0],['時間','shíjiān',1],['小時','xiăoshí',3]]
print(wordlist)
#二番目の項目をとりだす(index=1)
myindex = 1
#アンパック
tempword,temppinyin,templevel = wordlist[myindex]
print(tempword)
print(temppinyin)
print(templevel)
#インクリメント
templevel += 1
#リストに書き戻す
wordlist[myindex]=[tempword,temppinyin,templevel]
print(wordlist)
#JSON化
jsontxt=json.dumps(wordlist)
print(jsontxt)
#保存
with open("data.txt","w",encoding="utf-8") as fa:
fa.write(jsontxt)
#読み出し
with open("data.txt","r",encoding="utf-8") as fb:
jsontxt2 =fb.read()
wordlist2= json.loads(jsontxt2)
print(wordlist2)
これ実行すると
[['電話', 'diànhuà', 0], ['時間', 'shíjiān', 1], ['小時', 'xiăoshí', 3]]
時間
shíjiān
1
[['電話', 'diànhuà', 0], ['時間', 'shíjiān', 2], ['小時', 'xiăoshí', 3]]
[["\u96fb\u8a71", "di\u00e0nhu\u00e0", 0], ["\u6642\u9593", "sh\u00edji\u0101n", 2], ["\u5c0f\u6642", "xi\u0103osh\u00ed", 3]]
[['電話', 'diànhuà', 0], ['時間', 'shíjiān', 2], ['小時', 'xiăoshí', 3]]
と出力されました。リストデータの保存・読み出し、エンコード・デコードなどはこれで解決できました。