1. 程式人生 > >Python:shelve資料解析

Python:shelve資料解析

#!/usr/bin/env python
# coding:UTF-8


"""
@version: python3.x
@author:曹新健
@contact: [email protected]
@software: PyCharm
@file: shelve資料解析.py
@time: 2018/11/8 19:01
"""

"""
一、簡要介紹:
    Shelve是物件持久化儲存方法,將物件儲存到檔案裡面,預設的資料儲存檔案是二進位制的。可以作為一個簡單
    的資料儲存方案。
二、用法:
    使用時,只需要使用open函式獲取一個Shelve物件,然後對資料進行增刪改查操作,最後呼叫close函式將資料
    寫入檔案。
    shelve.open(filename, flag=’c’, protocol=None, writeback=False):建立或開啟一個shelve物件。
    shelve預設開啟方式支援同時讀寫操作。
        1、filename是關聯的檔案路徑。
        2、可選引數flag,預設為‘c’,如果資料檔案不存在,就建立,允許讀寫;可以是: ‘r’: 只讀;
           ’w’: 可讀寫; ‘n’: 每次呼叫open()都重新建立一個空的檔案,可讀寫。
        3、protocol:是序列化模式,預設值為None。
        4、writeback:預設為False。當設定為True以後,shelf將會將所有從DB中讀取的物件存放到一個記憶體緩
           存。當我們close()關閉的Shelve的時候,快取中所有的物件會被重新寫入DB。
           writeback方式有優點也有缺點。優點是減少了我們出錯的概率,並且讓物件的持久化對使用者更加的透
           明瞭;但這種方式並不是所有的情況下都需要,首先,使用writeback以後,Shelve在open()的時候會
           增加額外的記憶體消耗,並且當DB在close()的時候會將快取中的每一個物件都寫入到DB,這也會帶來額
           外的等待時間。因為shelve沒有辦法知道快取中哪些物件修改了,哪些物件沒有修改,因此所有的物件
           都會被寫入。
"""
import shelve
with shelve.open('shelve.txt') as db:
    db['person1'] = {"name":"cxj","age":18,"hobby":["money","power","girl"]}
    db['person2'] = {"name": "caoxinjian", "age": 28, "hobby": ["money", "power", "girl"]}

with shelve.open('shelve.txt') as db:
    del db['person1']
    db['person3'] = {"name": "Tom", "age": 28, "hobby": ["money", "power", "girl"]}
    print(db['person2'])
    #列印{'name': 'caoxinjian', 'age': 28, 'hobby': ['money', 'power', 'girl']}
    print(type(db))
    #列印<class 'shelve.DbfilenameShelf'>
    print(dict(db))
    #列印{'person2': ..., 'person3': {'name': 'Tom', 'age': 28, 'hobby': ['money', 'power', 'girl']}}