見出し画像

リストを永続化したい

(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]]

と出力されました。リストデータの保存・読み出し、エンコード・デコードなどはこれで解決できました。

この記事が気に入ったらサポートをしてみませんか?