Python でちょっとしたデータの保存に使える shelve というモジュールを試してみました。 SQLite などの DB を使うよりも手軽に、それでいてテキストファイルと違って Python のデータオブジェクトをそのまま保存できるのです。リスト型や辞書型などのデータを保存しておいて再利用が可能なのでスクリプト間でのデータの受け渡しにも使えそうですね。
データを保存するサンプルです。リストと現在時刻をそれぞれ myshelve という shelve に保存します。
import datetime
import shelve
def save_data(some_data):
d = shelve.open('./myshelve')
d['obj'] = some_data
# 現在の日時
today = datetime.datetime.now()
updated = today.strftime('%Y/%m/%d %a %H:%M:%S')
d['updated'] = updated
d.close()
print('data saved!')
def main():
list = ['Hokusai', 'Utamaro', 'Taro']
list.append('Hiroshige')
save_data(list)
if __name__ == '__main__':
main()
モジュールを import して、ファイルを開くときと同じように shelve.open(filename) という形で開いて、辞書型のようにキーを指定してデータを代入します。
import shelve
def main():
mydata = shelve.open('./myshelve')
print('type:', type(mydata))
print('keys_type:', type(mydata.keys()))
print('keys:', list(mydata.keys()))
print('items:', list(mydata.items()))
print('obj:', mydata['obj'])
print('updated:', mydata['updated'])
if __name__ == '__main__':
main()
読み込むときも辞書型と同じような感じで OK でした。 上記コードの結果は以下のようになります。
type: <class 'shelve.DbfilenameShelf'>
keys_type: <class 'collections.abc.KeysView'>
keys: ['obj', 'updated']
items: [('obj', ['Hokusai', 'Utamaro', 'Taro']), ('updated', '2014/04/24 Thu 15:13:31')]
obj: ['Hokusai', 'Utamaro', 'Taro']
updated: 2014/04/24 Thu 15:13:31